给出一个简单字典的简单列表
lst = [{'key1': 1}, {'key2': 2}, {'key3': 3}]
我想找到使用这里没有详细说明的方法计算出最小值的dict。 我的第一个想法是迭代列表来逐个检查dict,但这失败了:
for k, v in [x.items() for x in lst]:
print(k, v)
结果值错误(以及使用生成器而不是列表):
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),但是为什么不使用列表理解呢?有人能启发我吗?
编辑:我使用Python3,我知道items()会生成一个dict_视图,但我不明白为什么逻辑不起作用。
您缺少一个迭代级别。
通常,dict有多个键/值对。
dict.items()
以(key, value)
的形式将整个字典转换为元组序列。在您的例子中,每个字典只有一个项,但是items()
的结果仍然是元组的元组。如果您打印
[x.items() for x in lst]
的结果,您将看到结果是一个dict_view
项的列表;每个项本身都可以迭代。尝试一步一步地解压
lst
,以了解它是如何构造的。结果(相当于列表理解中的
x.items()
表达式)是包含k和v元组的另一个列表。元组是此列表中索引0的元素(也是唯一的元素)。所以你得像您可以在列表理解中添加一级缩进(正如@DanielRoseman建议的那样),而不是使用
dict_view
的第一个元素:屈服
如预期。
相关问题 更多 >
编程相关推荐