3

我对听写列表有点头疼。

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}]

4

3 回答 3

7

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
于 2012-12-10T16:56:08.857 回答
1

在我看来,copy字典的方法可能会对您有所帮助:

def funk(x):
    for i in x:
        new_dict = i.copy()
        new_dict['a'] += 1
        print new_dict
于 2012-12-10T16:58:35.563 回答
1

显然,它是否可行取决于您的操作的复杂性/目标,但不是就地修改您的列表,而是使用列表推导来创建一个新的:

def funk(x):
    return [{key: value+1 if key == "a" else value for key, value in i.items()} for i in x]

在您的示例中,您正在打印值,因此这将没有用,但如果您的意图可以通过拥有一个新的、更改的 dicts 列表来填充,那么它可能是最好的路线。

于 2012-12-10T16:59:04.887 回答