我有一本复杂的字典:
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'}]}
如何遍历字典?我仍然需要键和处理值列表中的每个字典。
答案 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']}")
感谢大家的帮助!