python - 如何使用列表中的键和Python中的空值初始化dict?

新手上路,请多包涵

我想从中得到:

 keys = [1,2,3]

对此:

 {1: None, 2: None, 3: None}

有没有一种pythonic的方法?

这是一种丑陋的做法:

 >>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

原文由 Juanjo Conti 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 732
2 个回答

dict.fromkeys 直接解决问题:

 >>> dict.fromkeys([1, 2, 3, 4])
{1: None, 2: None, 3: None, 4: None}

这实际上是一个类方法,因此它也适用于 dict 子类(如 collections.defaultdict )。

可选的第二个参数,默认为 None ,指定用于键的值。请注意,每个键都将使用 _相同的对象_,这可能会导致可变值出现问题:

 >>> x = dict.fromkeys([1, 2, 3, 4], [])
>>> x[1].append('test')
>>> x
{1: ['test'], 2: ['test'], 3: ['test'], 4: ['test']}

原文由 Thomas Wouters 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 字典理解

 >>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}

值表达式每次都会被评估,所以这可以用来创建一个带有单独列表(比如)作为值的字典:

 >>> x = {key: [] for key in [1, 2, 3, 4]}
>>> x[1] = 'test'
>>> x
{1: 'test', 2: [], 3: [], 4: []}

原文由 Adrien Plisson 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题