单行更新字典列表中的值-Python

时间:2018-09-11 18:25:05

标签: python

我有一个这样的词典列表:

l = [{"integer":"1"},{"integer":"2"},{"integer":"3"},{"integer":"4"}]

我想做类似以下的事情,以便将作为“整数”键值对的每个数字都返回为整数:

l = [{"integer":"1"},{"integer":"2"},{"integer":"3"},{"integer":"4"}]
r = map(lambda x: x["integer"]=int(x["integer"]), l)
print r 
#[{"integer":1},{"integer":2},{"integer":3},{"integer":4}]

但这会导致错误:

  

SyntaxError: lambda cannot contain assignment

有人知道用python做到这一点的干净方法吗?最好是使用地图或类似工具的单线飞机?

5 个答案:

答案 0 :(得分:2)

使用列表理解功能

您将遍历列表中的字典,并以x的形式返回它们,然后在新列表中插入包含所需键和返回值整数的新字典

r = [{'integer': int(x['integer'])} for x in l]

答案 1 :(得分:2)

您应该只使用循环:

l = [{"integer":"1"},{"integer":"2"},{"integer":"3"},{"integer":"4"}]
for d in l:
    d["integer"] = int(d["integer"])
print(l)
#[{'integer': 1}, {'integer': 2}, {'integer': 3}, {'integer': 4}]

但是,这里有一种应该适合您的衬套:

l = [{"integer":"1"},{"integer":"2"},{"integer":"3"},{"integer":"4"}]
[d.update({"integer": int(d["integer"])}) for d in l]
print(l)
#[{'integer': 1}, {'integer': 2}, {'integer': 3}, {'integer': 4}]

请注意,dict.update()返回None,因此,如果您将列表理解的输出分配给变量,则它将是包含所有None的列表。

print([d.update({"integer": int(d["integer"])}) for d in l])
#[None, None, None, None]

答案 2 :(得分:1)

以下内容可以一行完成:

r = [{'integer':int(x['integer'])} for x in l]
print(r)
# [{'integer': 1}, {'integer': 2}, {'integer': 3}, {'integer': 4}]

这利用列表理解中的dict理解。

答案 3 :(得分:1)

<img>

第二个循环仅循环一个键集,因此用克盐来进行两个循环:)

答案 4 :(得分:0)

我的一个朋友在聊天中提供了很棒的解决方案:

>>> listOfDict = [{1:1338}, {1:1338}, {1:1338}]
>>> y = 1337
>>> value = 1
>>> map(lambda x: x.update({value: y}), listOfDict)
[None, None, None]
>>> listOfDict
[{1: 1337}, {1: 1337}, {1: 1337}]