Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用map/lambda创建dict_Python_Python 3.x_Dictionary_Lambda - Fatal编程技术网

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)