Python 在列表的每个字典中添加一个元素(列表理解)

Python 在列表的每个字典中添加一个元素(列表理解),python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我有一个字典列表,希望为列表中的每个元素添加一个键。 我试过: 但是update方法返回None,因此我的结果列表中充满了None result = [ item["elem"]="value" for item in mylist ] 返回语法错误 >>> a = [ { 1:1 }, {2:2}, {3:3} ] >>> for item in a: ... item.update( { "test": "test" } ) ... >&

我有一个字典列表,希望为列表中的每个元素添加一个键。 我试过:

但是update方法返回None,因此我的结果列表中充满了None

result = [ item["elem"]="value" for item in mylist ]
返回语法错误

>>> a = [ { 1:1 }, {2:2}, {3:3} ]
>>> for item in a:
...     item.update( { "test": "test" } )
... 
>>> a
[{'test': 'test', 1: 1}, {'test': 'test', 2: 2}, {'test': 'test', 3: 3}]
您使用的列表理解不正确,调用
项.update
返回一个
None
值,因此新创建的列表将充满
None
值,而不是预期的
dict


您只需循环列表中的项目并相应地更新每个项目,因为列表包含对
dict
值的引用。

您不必担心构建新的词典列表,因为对更新词典的引用与对旧词典的引用相同:

 for item in mylist:
    item.update( {"elem":"value"})

不要使用列表理解,或者基于原始dict加上新键返回新dict:

[dict(list(item.items()) + [("elem", "value")]) for item in mylist]

如果你想使用列表理解,这里有一个很好的答案:

在您的情况下,它将是这样的:

result = [dict(item, **{'elem':'value'}) for item in myList]
例如:

myList = [{'a': 'A'}, {'b': 'B'}, {'c': 'C', 'cc': 'CC'}]
然后使用其中一个

result = [dict(item, **{'elem':'value'}) for item in myList]

最后,

>>> result
[{'a': 'A', 'elem': 'value'},
 {'b': 'B', 'elem': 'value'},
 {'c': 'C', 'cc': 'CC', 'elem': 'value'}]
你可以使用地图

result = map(lambda item: dict(item, elem='value'), myList)
如果您已经有元素列表,您可以执行以下操作:

#elements = ['value'] * len(myList)
result = map(lambda item: dict(item[0], elem=item[1]),zip(myList,elements))

然后您会得到结果

@vk1011的答案很好,可以使用扩展运算符简洁地进行扩展,新的字典对象是一个额外的好处

  • 若要使用新项覆盖任何现有键的值,可以将“排列”操作符置于新项之前

    result = [{**item, 'elem':'value'} for item in myList]
    
  • 若要使用现有项替代新项的值,请在新项后使用“排列”操作符

    result = [{'elem':'value', **item} for item in myList]
    

  • 这两种方法都会给出一个字典对象列表,其中包括新条目,传统上比其他(复杂的)答案更快:

    result = [{**item, 'elem':'value'} for item in myList]
    
    一些时间安排:


    为了澄清起见,尽管第一种方法更新了称为
    my_list
    的列表,这是所需的效果,
    结果
    是一个
    None
    列表,因为这是对每个项目列表执行
    项的结果。update
    ,此函数本身不返回任何结果。
    result = [{'elem':'value', **item} for item in myList]
    
    myList = [{'a': 'A'}, {'b': 'B'}, {'c': 'C', 'cc': 'CC'}]
    for item in myList: item['elem']='value'
    
    %timeit result = [dict(item, **{'elem':'value'}) for item in myList]
    865 ns ± 8.89 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    %timeit result = [dict(item, elem='value') for item in myList]
    854 ns ± 5.37 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    %timeit result = list(map(lambda item: dict(item, elem='value'), myList))
    1.22 µs ± 86.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    %timeit for item in myList: item.update({'elem':'value'})
    464 ns ± 3.72 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    %timeit for item in myList: item['elem']='value'
    124 ns ± 0.31 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)