如何在python中创建字典列表?

如何在python中创建字典列表?,python,arrays,python-3.x,dictionary,Python,Arrays,Python 3.x,Dictionary,我正在尝试列出python中的词典。为什么这三种方法不能产生相同的结果 A = [{}]*2 A[0]['first_name'] = 'Tom' A[1]['first_name'] = 'Nancy' print A B = [{},{}] B[0]['first_name'] = 'Tom' B[1]['first_name'] = 'Nancy' print B C = [None]*2 C[0] = {} C[1] = {} C[0]['first_name'] = 'Tom'

我正在尝试列出python中的词典。为什么这三种方法不能产生相同的结果

A = [{}]*2
A[0]['first_name'] = 'Tom'
A[1]['first_name'] = 'Nancy'
print A

B = [{},{}]
B[0]['first_name'] = 'Tom'
B[1]['first_name'] = 'Nancy'
print B


C = [None]*2
C[0] = {}
C[1] = {}
C[0]['first_name'] = 'Tom'
C[1]['first_name'] = 'Nancy'
print C
这就是我得到的:

[{'first_name': 'Nancy'}, {'first_name': 'Nancy'}]
[{'first_name': 'Tom'}, {'first_name': 'Nancy'}]
[{'first_name': 'Tom'}, {'first_name': 'Nancy'}]

第一种方法是只创建一个字典。这相当于:

templist = [{}]
A = templist + templist
tempdict = {}
A = []
A.append(tempdict)
A.append(tempdict)
这会扩展列表,但不会复制其中的词典。这也相当于:

templist = [{}]
A = templist + templist
tempdict = {}
A = []
A.append(tempdict)
A.append(tempdict)

所有列表元素都是对同一tempdict对象的引用。

您的第一个方法是只创建一个字典。这相当于:

templist = [{}]
A = templist + templist
tempdict = {}
A = []
A.append(tempdict)
A.append(tempdict)
这会扩展列表,但不会复制其中的词典。这也相当于:

templist = [{}]
A = templist + templist
tempdict = {}
A = []
A.append(tempdict)
A.append(tempdict)

所有列表元素都是对同一tempdict对象的引用。

Barmar很好地回答了为什么。我告诉你如何做好这件事:

如果要生成空目录列表,请使用以下生成器:

A = [{}for n in range(2)]
A[0]['first_name'] = 'Tom'
A[1]['first_name'] = 'Nancy'
print (A)

巴尔马有一个很好的答案。我告诉你如何做好这件事:

如果要生成空目录列表,请使用以下生成器:

A = [{}for n in range(2)]
A[0]['first_name'] = 'Tom'
A[1]['first_name'] = 'Nancy'
print (A)

在第一种情况下,您正在创建一个列表,其中两个元素引用同一个dict。您期望得到什么?Python中的词典是无序的。如果您想保持键的有序,请查看。在第一种情况下,您正在创建一个列表,其中两个元素引用同一个dict。您希望得到什么?Python中的词典是无序的。如果你想把钥匙弄得井井有条,那就看看吧。这很有道理。非常感谢。这是有道理的。非常感谢。