更新嵌套字典中的值 - Python

Yam*_*mar 2 python dictionary

我创建了一个字典如下:

gP = dict.fromkeys(range(6), {'a': None, 'b': None, 'c': None, 'd': None})
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试修改一个值时:

gP[0]['a'] = 1
Run Code Online (Sandbox Code Playgroud)

由于某种原因,所有值a(无论它们属于哪个键)都变为1,如下所示:

{0: {'a': 1, 'b': None, 'c': None, 'd': None},
 1: {'a': 1, 'b': None, 'c': None, 'd': None},
 2: {'a': 1, 'b': None, 'c': None, 'd': None},
 3: {'a': 1, 'b': None, 'c': None, 'd': None},
 4: {'a': 1, 'b': None, 'c': None, 'd': None},
 5: {'a': 1, 'b': None, 'c': None, 'd': None}}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?什么是正确的任务陈述?

Ult*_*nct 5

正如@deceze所说,Python不会制作副本.您在键值对的所有值部分中引用相同的dict.

另一种选择是:

gP = {x: {'a': None, 'b': None, 'c': None, 'd': None} for x in range(6)}
Run Code Online (Sandbox Code Playgroud)

更新:@Chris_Rands有一个更清晰的答案:

{x: dict.fromkeys('abcd') for x in range(6)}
Run Code Online (Sandbox Code Playgroud)

  • 更短的是`{x:dict.fromkeys('abcd')for x in range(6)}`; 或者可能更快将循环外的`dict.fromkeys` (3认同)