我在口述清单中有些头疼。
def funk(x):
for i in x:
i['a'] += 1
print i
list1 = [{'a':1, 'b':2}, {'a':3, 'b':4}]
funk(list1)
print list1
这将输出:
{'a': 2, 'b': 2}
{'a': 4, 'b': 4}
[{'a': 2, 'b': 2}, {'a': 4, 'b': 4}]
但我想拥有这个:
{'a': 2, 'b': 2}
{'a': 4, 'b': 4}
[{'a':1, 'b':2}, {'a':3, 'b':4}]
如何使list1
保持原样?例如:[{'a':1, 'b':2}, {'a':3, 'b':4}]
[funk()
可以复制x
,然后修改该副本,而不是修改原始的x
。
import copy
def funk(x):
x = copy.deepcopy(x)
for i in x:
i['a'] += 1
print i
list1 = [{'a':1, 'b':2}, {'a':3, 'b':4}]
funk(list1)
print list1
显然,它是否可行取决于操作的复杂性/目标,但不是就地修改列表,而是使用list comprehension创建一个新列表:
def funk(x):
return [{key: value+1 if key == "a" else value for key, value in i.items()} for i in x]
在您的示例中,您正在打印值,所以这没有用,但是如果您的意图可以通过拥有新的变更后的辞典列表来填补,则可能是最佳途径。
在我看来,字典的copy
方法可能在这里为您提供帮助:
def funk(x):
for i in x:
new_dict = i.copy()
new_dict['a'] += 1
print new_dict