如何提取和编辑字典值而不对字典本身进行编辑?
如何提取和编辑字典值而不对字典本身进行编辑?
这个问题在这里已经有了答案:
我有一个字典,其中键是字母,值是数组。我想提取其中一个数组,然后从中弹出一个值,而不更改字典。
mydict = {'a': ['apple', 'avocado'], 'b': ['banana', 'berry'], 'c': ['carrot', 'cucumber']} fruits = mydict['a'] fruits.pop(0)
当我打印字典时,我会得到:
>> {'a': ['avocado'], 'b': ['banana', 'berry'], 'c': ['carrot', 'cucumber']}
我如何获得一个不会在弹出时更改字典的列表副本?
admin 更改状态以发布 2023年5月23日
=
操作符可以创建新的变量或数据结构,但实际上它只是指向之前的同一对象。因此,使用=
操作符是行不通的。
您可以使用list.copy()
方法,它返回字典中列表的浅拷贝。修改此列表不会修改原始字典。
mydict = {'a': ['apple', 'avocado'], 'b': ['banana', 'berry'], 'c': ['carrot', 'cucumber']} fruits = mydict['a'].copy() fruits.pop(0) print(fruits) # returns ['avocado'] print(mydict) # returns {'a': ['apple', 'avocado'] ...}
或者,使用Python copy模块的copy()
或deepcopy()
方法都可以。
import copy mydict = {'a': ['apple', 'avocado'], 'b': ['banana', 'berry'], 'c': ['carrot', 'cucumber']} fruits = copy.copy(mydict['a']) # or copy.deepcopy(mydict['a']) fruits.pop(0) print(fruits) # returns ['avocado'] print(mydict) # returns {'a': ['apple', 'avocado'] ...}
浅拷贝(copy()
方法)和深拷贝(deepcopy()
方法)之间的区别很重要,但在这种情况下并不真正适用,因为您不是拷贝嵌套数据结构(您的字典),而只是字典中的一个列表。
例如,浅拷贝字典并修改嵌套列表也会修改原始字典:
import copy mydict = {'a': ['apple', 'avocado'], 'b': ['banana', 'berry'], 'c': ['carrot', 'cucumber']} fruits = copy.copy(mydict) fruits['a'].append('apricot') # also changes mydict print(fruits) # returns {'a': ['apple', 'avocado', 'apricot'] ...} print(mydict) # also returns {'a': ['apple', 'avocado', 'apricot'] ...}
而深拷贝则不会:
import copy mydict = {'a': ['apple', 'avocado'], 'b': ['banana', 'berry'], 'c': ['carrot', 'cucumber']} fruits = copy.deepcopy(mydict) fruits['a'].append('apricot') # also changes mydict print(fruits) # returns {'a': ['apple', 'avocado', 'apricot'] ...} print(mydict) # returns {'a': ['apple', 'avocado'] ...}
来自Python 3文档的copy模块:
浅拷贝和深拷贝之间的区别仅适用于复合对象(包含其他对象,如列表或类实例的对象):
浅拷贝构造一个新的复合对象,然后(尽可能地)将引用插入其中,指向原始对象中找到的对象。
深拷贝构造一个新的复合对象,然后递归地插入原始对象中找到的对象的副本。