在Python中使用字典中的特定值初始化未知数量的键

Fal*_*gel 1 python dictionary python-2.7

这是一种最佳实践问题。性能很重要。

我有一个字符串列表,字符串的数量不是恒定的数字(可能会因查询而异)。我希望创建一个将这些字符串作为键的字典,并为它们分配一个静态值(该值是常量,并且对于列表中的所有键都相同)。喜欢:

my_keys = ['AKey', 'AnotherKey', 'OneMore']

default_Value = dict({'count':0, 'basePrice': 0})
Run Code Online (Sandbox Code Playgroud)

预期输出:

{'AKey': {'count':0, 'basePrice': 0}, 'AnotherKey': {'count':0, 'basePrice': 0}, 'OneMore': {'count':0, 'basePrice': 0}}
Run Code Online (Sandbox Code Playgroud)

每个值字典 ( {'count':0, 'basePrice': 0}) 必须是一个单独的对象,而不是单个字典对象的引用。

我正在寻找除循环之外的 for东西。

我尝试了以下方法,当密钥数量已知时它可以工作。

dict(zip(my_keys, [dict(), dict(), dict()]))
Run Code Online (Sandbox Code Playgroud)

但由于项目的数量my_keys会发生变化,这种方法会失败。

Mar*_*ers 5

你无法避免循环;字典理解是从具有可变值的键序列创建字典的最佳实践:

{key: {'count':0, 'basePrice': 0} for key in my_keys}
Run Code Online (Sandbox Code Playgroud)

对于 Python 2.6 及更早版本,请使用生成器表达式和dict()构造函数:

dict((key, {'count':0, 'basePrice': 0}) for key in my_keys)
Run Code Online (Sandbox Code Playgroud)

为了完成起见,对于不可变的默认值,dict.fromkeys()是更好更快的替代方案。