使用map / lambda创建字典

时间:2018-08-20 22:46:59

标签: python python-3.x dictionary lambda

这是我的代码:

 a = {}
 ins = ["foo", "bar"]
 for i in ins:
     a[i] = {}

输出

{'foo': {}, 'bar': {}}

基本上,我想为列表中的每个项目创建一个字典。 有没有办法以更简洁的方式使用map或lambda?

1 个答案:

答案 0 :(得分:2)

正确的方法不是基于maplambda,而是简单的the dict.fromkeys alternate constructor

ins = ["foo", "bar"]
a = {x: {} for x in ins}

您可以使用maplambda来做到这一点,

a = dict(map(lambda x: (x, {}), ins))

但是,这比直接dict理解起来既慢又冗长。

如果您关联的值是不可变的,那么use collections.defaultdict是一个很好的解决方案,但是它每次都会重用默认值,因此如果您将其与默认值{}一起使用,它将使所有键都引用 same dict,并且通过一个键对其进行修改将更改所有其他键:

a = dict.fromkeys(ins, 0)  # GOOD! int is immutable

a = dict.fromkeys(ins, {})  # BAD! dict is mutable

最后,在许多此类情况下,一个不错的选择是here在访问(先前)不存在的密钥时提供默认值。这样,您就可以这样做:

from collections import defaultdict
a = defaultdict(dict)

并通过方括号语法访问任何键(无论是否来自ins),都会在首次​​访问时为其分配值dict()(相当于{})。