我在dict列表中有点头疼。
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}]
答案 0 :(得分:5)
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
答案 1 :(得分:1)
显然,它是否可行取决于您的操作的复杂性/目标,但不是使用list comprehension来创建新的列表,而是使用{{3}}来创建新的列表:
def funk(x):
return [{key: value+1 if key == "a" else value for key, value in i.items()} for i in x]
在您的示例中,您正在打印值,因此这不会有用,但如果您的意图可以通过新的,更改的dicts列表来填充,则可能是最佳路径。
答案 2 :(得分:0)
在我看来,字典的copy
方法可能对您有所帮助:
def funk(x):
for i in x:
new_dict = i.copy()
new_dict['a'] += 1
print new_dict