import collections
data = [
{'firstname': 'John', 'lastname': 'Smith'},
{'firstname': 'Samantha', 'lastname': 'Smith'},
{'firstname': 'shawn', 'lastname': 'Spencer'},
]
new_data = collections.defaultdict(list)
for d in data:
new_data[d['lastname']].append(d['firstname'])
print new_data
输出如下:
defaultdict(<type 'list'>, {'Smith': ['John', 'Samantha'], 'Spencer': ['shawn']})
这是模板:
{% for lastname, firstname in data.items %}
<h1> {{ lastname }} </h1>
<p> {{ firstname|join:", " }} </p>
{% endfor %}
但我模板中的循环不起作用。什么也没出现。它甚至没有给我一个错误。我该怎么解决?它应该显示姓氏和名字,如下所示:
<h1> Smith </h1>
<p> John, Samantha </p>
<h1> Spencer </h1>
<p> shawn </p>
尝试:
在Python 2中,最好使用
iteritems
,而不是items
:)插入新值后,通过禁用defaultdictdefaultdict的默认功能,可以避免复制到新的dict:
说明
template variable resolution algorithm in Django将尝试首先将
new_data.items
解析为new_data['items']
,当使用defaultdict(list)时,它将解析为空列表。若要禁用对空列表的默认设置并使Django在
new_data['items']
上失败,然后继续解析尝试,直到调用new_data.items()
,可以将default_factory attribute of defaultdict设置为None。相关问题 更多 >
编程相关推荐