我有一个dicts列表,我需要从中提取一些新元素。它适用于一个元素:
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}]
,它是提取的数据。
我现在意识到我还需要在提取的dict中包含原始的另一个元素:a
(及其值)。
我认为如果b
和update()
它与一对,我会采取的价值:
y = [k["b"].update({"a": k["a"]}) for k in d]
print(y)
这将无效(返回[None, None]
),因为update()
不会返回结果的dict。一个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}]