在模板 django 中打印(未排序的)字典
Posted
技术标签:
【中文标题】在模板 django 中打印(未排序的)字典【英文标题】:Print (unsorted) dictonary in template django 【发布时间】:2016-05-26 18:09:00 【问题描述】:我有一个字典列表:
Dict = [ 'key1':'value1', 'key2':'value2','key3':'value3',
'key1':'value4', 'key2':'value5','key3':'value6',
'key1':'value7', 'key2':'value8','key3':'value9']
我需要按这个顺序显示:
KEY1 KEY2 KEY3
value1 value2 value3
value4 value5 value6
value7 value8 value9
密钥只能按照这个顺序打印一次。
现在我在模板中有这段代码,但值与键的列不匹配:
<table border="1">
<tr>
% for k in listkey %
<td> k </td>
% endfor %
</tr>
% for raw in dict %
<tr>
% for k,v in raw.items %
<td> v </td>
% endfor %
</tr>
% endfor %
</table>
在views.py中:
listkeys = ['key1','key2','key3']
请帮我解决这个问题。谢谢!
【问题讨论】:
【参考方案1】:从您的Dict
列表中,您可以创建以key
值作为键的字典,value
将是上一个列表中所有组合值的list
。
# use lowercase variable names and dont pick name like "list", "dict", "tuple" etc.
from collections import defaultdict
your_list = ['key1':'value1', 'key2':'value2','key3':'value3',
'key1':'value4', 'key2':'value5','key3':'value6',
'key1':'value7', 'key2':'value8','key3':'value9']
output = defaultdict(list)
for d in your_list:
for key, value in d.items():
output[key].append(value)
输出将是
defaultdict(list,
'key1': ['value1', 'value4', 'value7'],
'key2': ['value2', 'value5', 'value8'],
'key3': ['value3', 'value6', 'value9'])
关于小写变量名PEP-8
【讨论】:
【参考方案2】:既然您已经注意到,python 中的 dict 是未排序的,因此除非您在模板中明确指定要访问的值,否则无法以任何顺序循环 dict。
您可以改为更改数据结构,以构建列表列表:
another_datastructure = []
for item in Dict:
# temp would hold value of key1, key2, key3 on current dict entry
temp = []
for key in listkeys:
temp.append(Dict[key])
another_datastructure.append(temp)
现在你有一个列表列表,每个列表都有 key 跟随 key1, key2 key3 的顺序。然后你可以循环它并保证顺序。
【讨论】:
谢谢,但我避免使用此解决方案,因为我可能需要获得一个特定值。但是根据您的建议,我认为我将构建两个数据结构:一个仅用于在模板中显示数据(列表列表),另一个用于具有值的计算(字典列表)。 哦,你的意思是你想在模板中获取字典的特定值?这可以通过 dict.key1 来完成。检查这个docs.djangoproject.com/en/1.9/ref/templates/api/…。以上是关于在模板 django 中打印(未排序的)字典的主要内容,如果未能解决你的问题,请参考以下文章
Django Python,通过字典并将其内容打印在html模板中