Python 为什么在构建dict()时会出现类型错误?

Python 为什么在构建dict()时会出现类型错误?,python,python-3.x,dictionary,list-comprehension,Python,Python 3.x,Dictionary,List Comprehension,我有一个目录列表,我需要从中提取一些元素,放到一个新的列表中。它适用于一个元素: d = [ { "a": 1, "b": { "x": 3 }, "blah": 4 }, { "a": 10, "b": { "x": 30 }, "blah": 40 }, ] z = [k["b"] f

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

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中包含原始dict中的另一个元素:
a
(及其值)

我想如果
b
update()
有一对值,我会取这个值:

y = [k["b"].update({"a": k["a"]}) for k in d]
print(y)
这将不起作用(返回
[None,None]
),因为
update()
不会返回生成的dict。A引导我从组件构建
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'
回溯(最近一次呼叫最后一次):
文件“C:/dev/config/scratch/scratch_21.py”,第24行,在
x=[dict(a=k[“a”],**k[“b”])表示d中的k]
文件“C:/dev/config/scratch/scratch_21.py”,第24行,在
x=[dict(a=k[“a”],**k[“b”])表示d中的k]
TypeError:类型对象为关键字参数“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'

您正在将多个
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'

添加数据后。。。您希望最终列表中的每个条目看起来像什么?添加数据后。。。你希望最终列表中的每个条目都是什么样子的?啊,我明白了。连续的试验修改了
k['b']
——我确实在一个接一个地测试上述所有代码。事实上,注释掉中间产物,只留下最后一个,解决了这个问题。谢谢啊,我明白了。连续的试验修改了
k['b']
——我确实在一个接一个地测试上述所有代码。事实上,注释掉中间产物,只留下最后一个,解决了这个问题。谢谢