以字典列表作为键和元组作为值的Python字典

问题描述:

我有一个列表,我想用它作为字典的键和值的列表。考虑以下几点:以字典列表作为键和元组作为值的Python字典

d = {} 
l = ['a', 'b', 'c', 'd', 'e'] 
t = [(1, 2, 3, 4), (7, 8, 9, 10), (4, 5, 6, 7), (9, 6, 3, 8), (7, 4, 1, 2)] 

for i in range(len(l)): 
    d[l[i]] = t[i] 

名单将始终是5个值并且有将始终如一地为5元组但有值几十万的每个元组。

我的问题是这样的:什么是最快的方式来填充字典,d,元组在t中,键是l中的值?

我也没有计时,但可能

d = dict(zip(l, t)) 

会比较好。对于只有5个键值对,我不认为izip()将提供超过zip()的任何优势。每个元组都有很多项目这一事实对于这个操作并不重要,因为元组对象不会在任何时候被复制,既不是在你的方法中,也不是在我的方法中。只有指向元组对象的指针才会插入到dicitonary中。

要建立在Sven的answer上,使用itertools.izip会更快,并且如果您需要创建更大的字典,请使用更少的内存。只有五个键/值对,构建字典的时间将会很短。

python -m timeit -s "l = l2 = range(100000)" "dict(zip(l, l2))" 
1000 loops, best of 3: 20.1 msec per loop 
python -m timeit -s "import itertools; l = l2 = range(100000)" "dict(itertools.izip(l, l2))" 
1000 loops, best of 3: 9.59 msec per loop 
+1

这些计时使用的键值对超过5个,所以我对这种差异并不感到惊讶。对于只有5个键值对,差异是不重要的。 (顺便说一句,+1实际测量,而不是猜测!) – 2011-05-31 17:22:39

+0

@Sven这是一个很好的观点。只有5个键值对,速度无论如何都是微乎其微的。 – zeekay 2011-05-31 18:29:39