Python 字典理解将字典和整数的元组列表转换为字典列表

Python dict comprehension convert list of tuples of dictionaries and integers into list of dictionaries

我有字典列表和整数列表

x = [
    {
        "name": "tom",
        "job": "judge"
    },
    {
        "name":"bob",
        "job": "policeman"
    }
]
y = [1000, 2200]

我想压缩它们并将 y 个元素作为 "payroll": y_element 添加到字典中 所需的输出将是:

[
    {
        "name": "tom",
        "job": "judge",
        "payroll": 1000
    },
    {
        "name":"bob",
        "job": "policeman",
        "payroll": 2200
    }
]

我实际上是通过以下方式实现的:

z = zip(x, y)
for i in z:
    i[0]["payroll"] = i[1]

z = [i[0] for i in z]

但我想知道是否可以在列表理解中进行字典理解。 这是我到目前为止尝试过的:

z = [{k: v, "value": o} for d, o in z for k, v in d.items()]

显然是错误的,因为输出是:

{'name': 'bob', 'job': 'policeman', 'value': 2}

如果 python ≥3.9,您可以使用 | 运算符合并字典:

out = [d | {'payroll': p} for d, p in zip(x, y)]

输出:

[{'name': 'tom', 'job': 'judge', 'payroll': 1000},
 {'name': 'bob', 'job': 'policeman', 'payroll': 2200}]

您可以在此处使用 ** 将字典与所需数据合并。

[{**d, 'payroll':i} for d, i in zip(x, y)]

# [{'name': 'tom', 'job': 'judge', 'payroll': 1000},
#  {'name': 'bob', 'job': 'policeman', 'payroll': 2200}]

作为一个对其他人的代码进行了 100 次(如果不是更多...)审查的人来说。我认为问题应该是你是否应该尝试以任何形式的理解来做到这一点。代码的可读性是关键,如果没有人理解您要做什么,那么它根本无法维护。 你会忘记它应该做什么,注释将与代码不同步(如果有的话)。

我认为最易读的版本是保持简单的版本。请注意,这确实会修改 x。 S

for index, dikt in enumerate(x):
    dikt["payroll"] = y[index] # fetch the payroll from the other list using the index

一个班轮比这个有什么好处?一行,可读性差。是的,让你知道 'comprehension',对你有好处!没有人会给你一个价格。我作为审稿人会添加一个问题说“不要这样做。它会降低可读性”。

太漂亮了;不要。

免责声明:是的,在某些情况下,简单 理解力也足够好。但我见过人们开始循环理解结果然后进一步过滤结果的结构。

Simple is better than complex. Complex is better than complicated.