给定一个简单字典的平面列表
lst = [{'key1': 1}, {'key2': 2}, {'key3': 3}]
我想找到使用此处未详述的方法计算得出的最小值的字典。我的第一个想法是迭代列表以逐个字典检查字典,但这失败了:
for k, v in [x.items() for x in lst]:
print(k, v)
结果 ValueError(以及使用生成器而不是列表):
for k, v in [x.items() for x in lst]:
ValueError: not enough values to unpack (expected 2, got 1)
然而,
for x in lst:
for k, v in x.items():
print(k, v)
产量
key1 1
key2 2
key3 3
不出所料。我假设所有方法都按预期工作(除非 PEBKAC),但为什么它不能使用列表理解?有人可以启发我吗?
编辑:我使用 python 3,我知道 items() 会产生一个 dict_view 但我不明白为什么逻辑不起作用。
原文由 jake77 发布,翻译遵循 CC BY-SA 4.0 许可协议
您缺少一定程度的迭代。
通常,字典有多个键/值对。
dict.items()
将整个字典转换为(key, value)
形式的元组序列。在您的情况下,每个字典只有一个项目,但items()
的结果仍然是元组的元组。如果打印
[x.items() for x in lst]
的结果,您会看到结果是dict_view
项的列表;其中每一个本身都可以迭代。