在模板 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 - 在模板中打印字典

在 django 模板中循环排序字典特定次数

Django Python,通过字典并将其内容打印在html模板中

Django 字典对象在模板中不显示任何内容,但打印到控制台

在django模板的一本字典里面的字典

如何访问 Django 模板中的字典元素?