python - 迭代字典列表和解包

标签 python python-3.x list-comprehension argument-unpacking

给定一个简单字典的平面列表

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 但我不明白为什么逻辑不起作用。

最佳答案

您缺少一个迭代级别。

通常,字典有多个键/值对。 dict.items() 将整个字典转换为 (key, value) 形式的元组序列。在您的情况下,每个字典只有一个项目,但 items() 的结果仍然是元组的元组。

如果打印 [x.items() for x in lst] 的结果,您会看到结果是 dict_view 项目的列表;其中每一个本身都可以迭代。

关于python - 迭代字典列表和解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46345845/

相关文章:

python - 列表理解之谜 - Python

python - 无法检索行

python - PhantomJS 返回空网页(python,Selenium)

python - 将动态数量的字段添加到 Django 管理表单

python-3.x - 使用带有 Python3.x 和 Selenium 的 Selenium 选择复选框

python - 多列表理解转化为单列表理解

python - BeautifulSoup .link.get ("href") 只返回 None

python - pywintypes.com_error : (-2147221008, 'CoInitialize has not been called.',无,无)

python - 如何从与当前登录用户关联的模型导入和编辑变量

python - 排序由python中的列表理解生成的元组