以字典列表作为键和元组作为值的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
这些计时使用的键值对超过5个,所以我对这种差异并不感到惊讶。对于只有5个键值对,差异是不重要的。 (顺便说一句,+1实际测量,而不是猜测!) – 2011-05-31 17:22:39
@Sven这是一个很好的观点。只有5个键值对,速度无论如何都是微乎其微的。 – zeekay 2011-05-31 18:29:39