【问题标题】:Python Dictionary with List as Keys and Tuple as Values以列表为键、元组为值的 Python 字典
【发布时间】:2011-09-05 15:50:35
【问题描述】:

我有一个要用作字典键的列表和一个包含值的元组列表。考虑以下几点:

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 个元组,但是每个元组中有数十万个值。

我的问题是:用 t 中的元组填充字典 d 的最快方法是什么,其中键是 l 中的值?

【问题讨论】:

    标签: python list dictionary tuples


    【解决方案1】:

    我没有计时,但可能

    d = dict(zip(l, t))
    

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

    【讨论】:

      【解决方案2】:

      在 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 表示实际测量而不是猜测!)
      • @Sven 说得好。只有 5 个键值对,无论哪种方式,速度都是微不足道的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 2013-07-11
      相关资源
      最近更新 更多