Python字典的键为列表,值为元组

6

我有一个列表,想要将其作为字典的键,并将值存储在元组的列表中。请考虑以下示例:

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个元组,但每个元组中有成千上万个值。

我的问题是:用l中的值作为键,以最快的方式将t中的元组填充到字典d中是什么?

2个回答

17
我没有进行时间测试,但很可能
d = dict(zip(l, t))

对于仅有5个键值对的情况,我认为使用zip()izip()相比没有任何优势。由于元组对象在任何时刻都没有被复制,因此每个元组具有许多项并不影响此操作。在您的方法和我的方法中,只是插入了指向元组对象的指针而已。


9

在Sven的答案的基础上,如果您需要创建一个更大的字典,使用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是因为实际测量而非猜测!) - Sven Marnach
@Sven 那是个好观点。只有5个键值对,无论哪种方式速度都会非常小。 - Zach Kelling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接