一个用于更新字典列表中的值的行程序-Python
我有一个这样的字典列表:一个用于更新字典列表中的值的行程序-Python,python,Python,我有一个这样的字典列表: l = [{"integer":"1"},{"integer":"2"},{"integer":"3"},{"integer":"4"}] 我希望执行类似于以下的操作,以便作为“integer”键的值对的每个数字都作为整数返回: l = [{"integer":"1"},{"integer":"2"},{"integer":"3"},{"integer":"4"}] r = map(lambda x: x["integer"]=int(x["integer"]), l
l = [{"integer":"1"},{"integer":"2"},{"integer":"3"},{"integer":"4"}]
我希望执行类似于以下的操作,以便作为“integer”键的值对的每个数字都作为整数返回:
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}]
但这会导致一个错误:
语法错误:lambda不能包含赋值
有人知道用python实现这一点的干净方法吗?最好是使用map或类似工具的单行线?以下内容在一行中工作:
r = [{'integer':int(x['integer'])} for x in l]
print(r)
# [{'integer': 1}, {'integer': 2}, {'integer': 3}, {'integer': 4}]
这在列表理解中使用了dict理解。使用列表理解 您将遍历列表中的字典,并将其返回为
x
,然后在新列表中插入一个新字典,其中包含所需的键和返回的整数值
r = [{'integer': int(x['integer'])} for x in l]
您应该只使用一个循环:
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]
如果第二个循环只在一个键组上循环,那么就用克盐做两个循环:)我的一个朋友在聊天时提出的很棒的解决方案:
>>> 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}]
“你知道一种不用重新定义整本字典的方法吗?”贾斯汀加德纳还在一行?你的解决方案怎么了?您是否有其他与非整数值相对应的键?@pault-抱歉,我应该提到,lambdas不喜欢赋值,因此此代码无法运行。为什么它必须是一行?这是一个简单的for循环。你可以定义一个函数来封装它。@Barmar one liners显然让你更聪明了哈哈jk,但我自己认为one liners有一定的吸引力,你不觉得吗?你知道一种不必重新定义整本字典的方法吗?你可以说
l=[{'integer':int(x['integer'])对于l中的x]
后接打印(l)
。我只是按照您的代码定义了一个新变量r
,但您不一定需要这样做。@Joel他的代码分配了一个新变量,但它也修改了原有的词典(如果合法的话,也会修改)。似乎就地修改才是他真正想要的。这基本上等同于,只是你用调用map
替换了列表comp。顺便说一句,这在python3中不起作用。在任何情况下,我仍然认为应该使用循环。
>>> 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}]