Python 使用map/lambda创建dict
这是我的密码:Python 使用map/lambda创建dict,python,python-3.x,dictionary,lambda,Python,Python 3.x,Dictionary,Lambda,这是我的密码: a = {} ins = ["foo", "bar"] for i in ins: a[i] = {} 输出 {'foo': {}, 'bar': {}} 基本上,我想为列表中的每个项目创建一个dict。 有没有更简洁的方法使用map或lambda来实现这一点?正确的方法不是基于map或lambda,而是基于一个简单的: 您可以使用map和lambda这样做: a = dict(map(lambda x: (x, {}), ins)) 但这比直接的dict理
a = {}
ins = ["foo", "bar"]
for i in ins:
a[i] = {}
输出
{'foo': {}, 'bar': {}}
基本上,我想为列表中的每个项目创建一个dict。
有没有更简洁的方法使用map或lambda来实现这一点?正确的方法不是基于map或lambda,而是基于一个简单的: 您可以使用
map
和lambda
这样做:
a = dict(map(lambda x: (x, {}), ins))
但这比直接的dict
理解更慢、更详细
如果您的关联值是不可变的,那么这将是一个很好的解决方案,但它每次都会重用默认值,因此如果您使用默认值{}
,它将使所有键引用相同的dict
,通过一个键修改它将更改所有其他键:
a = dict.fromkeys(ins, 0) # GOOD! int is immutable
a = dict.fromkeys(ins, {}) # BAD! dict is mutable
最后,在许多这样的场景中,一个好的选择是在访问(以前)不存在的密钥时提供默认值。这样,您就可以:
from collections import defaultdict
a = defaultdict(dict)
通过括号语法访问任何键(无论是否从ins
),将在第一次访问时为其赋值dict()
(相当于{}
)
from collections import defaultdict
a = defaultdict(dict)