【发布时间】:2018-10-04 15:35:54
【问题描述】:
我有一个清单,比如说:
NUM = 100
my_list = list(range(NUM))
我想生成一个dict,其中键等于值,例如:
my_dict = {item: item for item in my_list}
或:
my_dict = dict(zip(my_list, my_list))
我已经运行了一些微基准,看起来它们的速度相似,但我希望第二个会快得多,因为循环应该在 C 中发生。
例如,以下构造:
my_dict = {key: SOMETHING for key in keys}
翻译成更快:
my_dict = dict.fromkeys(k, SOMETHING)
所以,我的问题是:{x: x for x in my_list} 是否有类似的构造?
编辑
我检查了dir(dict),似乎没有这个方向(我希望它被称为dict.fromitems())。
编辑 2
dict.fromitems() 之类的方法比这个特定用例的应用范围更广,因为:
dict.fromitems(keys, values)
原则上可以同时替代两者:
{k, v for k, v in zip(keys, values)}
和:
dict(zip(keys, values))
【问题讨论】:
-
不,没有。
-
我真的不明白为什么有人会首先需要这样的东西......你能给我们一个用例吗?也许我们可以找到一种更好的方法来做你想做的事
-
dict(zip版本进行两个函数调用(尽管它们是 C 调用,比 Python 调用快)。但是zip必须构建一堆元组,虽然这是一个便宜的操作,但 dict comp 避免了这种情况。 -
时间问题是你代码的瓶颈吗?
-
还有,弗雷德说的。你打算在任何阶段改变价值观吗?如果没有,为什么不直接使用一套?
标签: python list performance dictionary