在一行中创建多个词典而不引用其他词典?

时间:2017-10-12 06:22:22

标签: python dictionary

我需要在一行中创建多个词典,我尝试跟随。

a,b,c = dict(), dict(), dict()

有没有任何pythonic方法来实现这一目标?我试过

a = b = c = dict()

但在此,如果我改变a,它也会反映其他词组

a['k'] = 'val'

a
{'k': 'val'}

b
{'k': 'val'}

c
{'k': 'val'}

2 个答案:

答案 0 :(得分:0)

你的第一种方法很好。使用

a,b,c = dict(), dict(), dict()

第二种方法的解释:

  

Python变量是对象的引用,但实际数据是   包含在对象中。

a = b = c = dict()没有制作三个词典。在python中,变量不存储值。变量指向对象和对象存储值,因此这里a,b,c变量指向包含一个dict()的同一对象。你可以检查

print(id(a),id(b),id(c))
4321042248 4321042248 4321042248

这就是为什么当你改变一个时,它也会改变另一个因为它们持有相同的dict值。

答案 1 :(得分:0)

我在这里发表一些想法:

Pep 8是python代码的样式指南:https://www.python.org/dev/peps/pep-0008/。但是没有关于在那里声明变量的事情。

虽然这些工作:

a,b,c = dict(), dict(), dict()
a, b, c = [dict() for _ in range(3)]

我认为这是最具可读性的:<​​/ p>

a = dict()
b = dict()
c = dict()

原因:

您始终可以期望变量在不同的行上定义。如果你要分配20个项目,那将是:a,b,c,d,e .... ??

无论如何,另一种方法是将它们嵌套在一个字典中,这里也只声明了一个变量:

dicts = {letter:dict() for letter in list("abc")} # {'a': {}, 'b': {}, 'c': {}}