在 Python 中将字典附加到列表中
Append a dictionary to a list in Python
将字典附加到列表:
- 使用该
copy()
方法创建字典的浅表副本。 - 使用
list.append()
方法将副本追加到列表中。 - 该列表将按值而不是按引用包含字典。
主程序
my_dict = {'name': 'Alice', 'age': 30} my_list = [] dict_copy = my_dict.copy() # 👈️ create copy my_list.append(dict_copy) print(my_list) # 👉️ [{'name': 'Alice', 'age': 30}]
我们使用copy.copy
方法创建字典的浅表副本。
这是必要的,因为如果我们
dict
直接将对象附加到列表中,我们将附加对同一dict
对象(内存中的相同位置)的引用。这是一个如何出错的示例。
主程序
my_dict = {'name': 'Alice', 'age': 30} my_list = [] my_list.append(my_dict) my_list[0]['name'] = 'Bob' print(my_list) # 👉️ [{'name': 'Bob', 'age': 30}] print(my_dict) # 👉️ {'name': 'Bob', 'age': 30}
请注意,在更新name
列表中字典的键之后,我们也更新了name
字典中的键。
这样做的原因是——我们没有创建副本,所以我们在列表中添加了对同一词典的引用。
如果您有一个包含嵌套键值对的字典,请创建一个深层副本。
主程序
import copy my_dict = {'name': 'Alice', 'address': {'country': 'Austria'}} my_list = [] dict_copy = copy.deepcopy(my_dict) # 👈️ create deep copy my_list.append(dict_copy) print(my_list) # 👉️ [{'name': 'Alice', 'address': {'country': 'Austria'}}]
copy.deepcopy方法创建所
提供对象的深层副本。
copy.deepcopy
仅当您的字典包含其他对象(如列表、类实例或嵌套字典)时才需要使用。现在我们不再有更新列表中字典中的值会更新另一个字典中的相同值的问题。
主程序
import copy my_dict = {'name': 'Alice', 'address': {'country': 'Austria'}} my_list = [] dict_copy = copy.deepcopy(my_dict) # 👈️ create deep copy my_list.append(dict_copy) my_list[0]['address']['country'] = 'Belgium' print(my_list[0]['address']['country']) # 👉️ Belgium print(my_dict['address']['country']) # 👉️ Austria
我们更新了列表中的字典,但原始字典中的相同值保持不变。
这样做的原因是 – 我们创建了原始字典的副本并将副本添加到列表中,因此我们按值将字典添加到列表中,而不是引用。
列表中的字典存储在内存中与原始字典完全不同的位置,它们是 2 个独立的对象。