gpt4 book ai didi

python - 为什么在构建 dict() 时会出现 TypeError?

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:31 25 4
gpt4 key购买 nike

我有一个字典列表,我需要从中提取一些元素到一个新列表中。它适用于一个元素:

d = [
{
"a": 1,
"b": {
"x": 3
},
"blah": 4
},
{
"a": 10,
"b": {
"x": 30
},
"blah": 40
},
]

z = [k["b"] for k in d]
print(z)

这会输出 [{'x': 3}, {'x': 30}],这是提取的数据。

我现在意识到我还需要在提取的字典中包含原始字典中的另一个元素:a(及其值)。

我想如果 bupdate() 成对的话我会取值:

y = [k["b"].update({"a": k["a"]}) for k in d]
print(y)

这将不起作用(返回 [None, None]),因为 update() 不会返回结果字典。 previous question引导我从组件构建一个 dict():

x = [dict(a=k["a"], **k["b"]) for k in d]
print(x)

这崩溃了

Traceback (most recent call last):
File "C:/dev/config/scratches/scratch_21.py", line 24, in <module>
x = [dict(a=k["a"], **k["b"]) for k in d]
File "C:/dev/config/scratches/scratch_21.py", line 24, in <listcomp>
x = [dict(a=k["a"], **k["b"]) for k in d]
TypeError: type object got multiple values for keyword argument 'a'

这是什么意思?具体来说:当该键只有一个值(整数)时,“多个值”是什么?

最佳答案

您将多个 a 键传递给 dict() 调用;一个作为关键字参数,另一个在 ** 扩展映射中:

>>> dict(a=41, **{'a': 82})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: type object got multiple values for keyword argument 'a'

在这里调用什么对象并不重要,关键字参数在任何调用中都必须是唯一的。

您可能正在使用调用 .update() 的相同词典,所以现在您所有的 k['b'] 词典都有一个 a 键也是如此。重新构建您的 d 列表,您的代码将起作用:

>>> [k["b"] for k in d]
[{'x': 3}, {'x': 30}]
>>> [dict(a=k["a"], **k["b"]) for k in d]
[{'a': 1, 'x': 3}, {'a': 10, 'x': 30}]

关于python - 为什么在构建 dict() 时会出现 TypeError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50628407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com