我有一个字典列表,并且希望为此列表的每个元素添加一个键。 我想:在列表的每个字典中添加一个元素(列表理解)
result = [ item.update({"elem":"value"}) for item in mylist ]
但更新方法返回None,所以我的结果列表已满无。
result = [ item["elem"]="value" for item in mylist ]
返回语法错误。
我有一个字典列表,并且希望为此列表的每个元素添加一个键。 我想:在列表的每个字典中添加一个元素(列表理解)
result = [ item.update({"elem":"value"}) for item in mylist ]
但更新方法返回None,所以我的结果列表已满无。
result = [ item["elem"]="value" for item in mylist ]
返回语法错误。
你不需要担心构建字典的一个新的列表,因为你更新字典的引用是一样的引用旧字典:
for item in mylist:
item.update({"elem":"value"})
>>> 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}]
您正在使用列表中理解不正确,调用item.update
返回None
值,因此您的新创建的列表将充满None
值,而不是你的预期dict
值。
您只需要遍历列表中的项目并相应地更新每个项目,因为该列表持有对dict
值的引用。
要么不使用列表理解,或返回在原有基础上的dict一个新字典加上新的密钥:
[dict(list(item.items()) + [("elem", "value")]) for item in mylist]
如果您想使用列表理解,还有这里是一个很好的答案: https://stackoverflow.com/a/3197365/4403872
在你的情况,这将是这样的:
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 = [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)
如果你已经有了lements的列表,你可以这样做:
#elements = ['value'] * len(myList)
result = map(lambda item: dict(item[0], elem=item[1]),zip(myList,elements))
那么你就有结果
权,我想用一个列表理解,但没有更简单。谢谢。 –
这也应该与列表理解。例如[item.update .... for myList] – Erich