这是我的代码:
a = {}
ins = ["foo", "bar"]
for i in ins:
a[i] = {}
输出
{'foo': {}, 'bar': {}}
基本上,我想为列表中的每个项目创建一个字典。 有没有办法以更简洁的方式使用map或lambda?
答案 0 :(得分:2)
正确的方法不是基于map
或lambda
,而是简单的the dict.fromkeys
alternate constructor:
ins = ["foo", "bar"]
a = {x: {} for x in ins}
您可以使用map
和lambda
来做到这一点,
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()
(相当于{}
)。