将字典附加到 Python 中的列表

在 Python 中将字典附加到列表中

Append a dictionary to a list in Python

将字典附加到列表:

  1. 使用该copy()方法创建字典的浅表副本。
  2. 使用list.append()方法将副本追加到列表中。
  3. 该列表将按值而不是按引用包含字典。
主程序
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 个独立的对象。