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.
我有字典列表和整数列表
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.