Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个用于更新字典列表中的值的行程序-Python_Python - Fatal编程技术网

一个用于更新字典列表中的值的行程序-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}]