>>> help(dict)
class dict(object)
| dict() -> new empty dictionary
| dict(mapping) -> new dictionary initialized from a mapping object's
| (key, value) pairs
| dict(iterable) -> new dictionary initialized as if via:
| d = {}
| for k, v in iterable:
| d[k] = v
| dict(**kwargs) -> new dictionary initialized with the name=value pairs
| in the keyword argument list. For example: dict(one=1, two=2)
>>> min(timeit.repeat(lambda: {k: v for k, v in zip(keys, values)}))
0.7836067057214677
>>> min(timeit.repeat(lambda: dict(zip(keys, values))))
1.0321204089559615
>>> min(timeit.repeat(lambda: {keys[i]: values[i] for i in range(len(keys))}))
1.0714934510178864
>>> min(timeit.repeat(lambda: dict([(k, v) for k, v in zip(keys, values)])))
1.6110592018812895
>>> min(timeit.repeat(lambda: dict((k, v) for k, v in zip(keys, values))))
1.7361853648908436
13 回答
您可以使用字典理解使用一行来创建它:
这就是它.Enjoy Python .....;)
更自然的方式是使用字典理解
像这样:
Voila :-)成对的
dict
构造函数和zip
函数非常有用:https://docs.python.org/3/library/functions.html#func-dict没有zip功能的方法
性能最佳 - Python 2.7和3,dict理解:
使用dict构造函数的一个可能的改进是使用dict理解的本地语法(不是列表理解,正如其他人错误地把它放在一起):
在Python 2中,
zip
返回一个列表,为避免创建不必要的列表,请改用izip
(别名为zip可以减少代码更改,当您转移到Python 3时) .所以这仍然是:
Python 2,非常适合<= 2.6
来自
itertools
的izip
在Python 3中变为zip
.izip
比Python 2的zip更好(因为它避免了不必要的列表创建),并且适用于2.6或更低版本:Python 3
在Python 3中,
zip
与itertools
模块中的函数相同,因此它只是:然而,字典理解会更高效(参见本答案末尾的表现评论) .
所有案例的结果:
在所有情况下:
说明:
如果我们看一下
dict
的帮助,我们会发现它需要各种形式的参数:最佳方法是使用iterable,同时避免创建不必要的数据结构 . 在Python 2中,zip创建了一个不必要的列表:
在Python 3中,等效的是:
和Python 3的
zip
只是创建一个可迭代的对象:由于我们希望避免创建不必要的数据结构,我们通常希望避免Python 2的
zip
(因为它会创建一个不必要的列表) .性能较差的替代方案:
这是一个传递给dict构造函数的生成器表达式:
或等效地:
这是一个传递给dict构造函数的列表理解:
在前两种情况下,在zip可迭代上放置一层额外的非操作(因此不必要的)计算,并且在列表理解的情况下,不必要地创建额外的列表 . 我希望他们所有人都不那么高效,当然也不会更多 .
绩效考核:
在64位Python 3.4.3中,在Ubuntu 14.04上,从最快到最慢排序:
对于那些需要简单代码且不熟悉
zip
的人:这可以通过一行代码完成:
你也可以在Python≥2.7中使用字典理解:
试试这个:
在Python 2中,与
zip
相比,它在内存消耗方面也更经济 .您可以使用以下代码:
但要确保列表的长度是相同的 . 如果长度不一样,那么zip函数就会变长 .
最好的解决方案仍然是:
传递它:
如果您需要在创建字典之前转换键或值,则可以使用generator expression . 例:
看看Code Like a Pythonista: Idiomatic Python .
使用Python 3.x,用于字典理解
更多关于dict comprehensions here,有一个例子: