为什么这本字典变成了元组?

时间:2021-02-24 00:54:19

标签: python dictionary

我有一本复杂的字典:

l = {10: [{'a':1, 'T':'y'}, {'a':2, 'T':'n'}], 20: [{'a':3,'T':'n'}]}

当我试图迭代字典时,我没有得到一个字典,其中包含一个字典的值列表,我得到一个像这样的元组:

for m in l.items():
    print(m)

(10, [{'a': 1, 'T': 'y'}, {'a': 2, 'T': 'n'}])
(20, [{'a': 3, 'T': 'n'}])

但是当我打印 l 时,我得到了我的原始字典:

In [7]: l
Out[7]: {10: [{'a': 1, 'T': 'y'}, {'a': 2, 'T': 'n'}], 20: [{'a': 3, 'T': 'n'}]}

如何遍历字典?我仍然需要键和处理值列表中的每个字典。

4 个答案:

答案 0 :(得分:4)

这里有两个问题。首先,你会问为什么这会变成一个“元组”——这个问题的答案是因为这是字典上的 .items() 方法返回的——每个键/值对的元组。

了解了这一点,您就可以决定如何使用这些信息。迭代时可以选择将元组展开为两部分

for k, v in l.items():
    # Now k has the value of the key and v is the value
    # So you can either use the value directly
    print(v[0]);
    # or access using the key
    value = l[k];
    print(value[0]);
    # Both yield the same value



答案 1 :(得分:2)

使用字典,您可以在迭代时添加另一个变量。

for key, value in l.items():
    print(key,value)

答案 2 :(得分:1)

在处理嵌套对象时,我经常依靠 pprint 一目了然地知道我在处理什么结构。

from pprint import pprint
l = {10: [{'a':1, 'T':'y'}, {'a':2, 'T':'n'}], 20: [{'a':3,'T':'n'}]}
pprint(l, indent=4, width=40)

输出:

{   10: [   {'T': 'y', 'a': 1},
            {'T': 'n', 'a': 2}],
    20: [{'T': 'n', 'a': 3}]}

其他人已经回答了实现。

答案 3 :(得分:0)

感谢大家的帮助。我确实讨论过如何处理这个问题。这是我想出的实现:

for m in l.items():
    k,v = m
    print(f"key: {k}, val: {v}")
    for n in v:
        print(f"key: {n['a']}, val: {n['T']}")

感谢大家的帮助!

相关问题