【问题标题】:Python: Efficient way to iterate over a list and a dictionary simultaneously containing similar valuesPython:迭代列表和同时包含相似值的字典的有效方法
【发布时间】:2015-02-25 03:57:58
【问题描述】:

我有两个数据结构:一个列表和一个 defaultdict 字典。该列表包含 300,000 个数字的无序序列,字典包含与键相同的数字(顺序不同),对应的值是一些小整数。例如,列表可能类似于:l=[500,800,1500],那么对应的字典类似于 d={800:3, 1500:1, 500:4}。我的目标是创建另一个列表,其中仅包含字典 d 中每个键的对应值,按 l 的顺序排列。对于简单的示例,我想返回 [4,3,1](不是 [3,1,4])。我有一些简单的代码可以运行,但在 300,000 个数字上运行需要非常长的时间。

这是我所拥有的:

for k,v in d.iteritems():
      for i in xrange(len(l)):
           if(l[i]==k):
                 out[i]=v

有什么方法可以提高效率吗?

【问题讨论】:

    标签: python performance list dictionary


    【解决方案1】:

    遍历列表中的术语,而不是字典中的键值对:

    >>> l = [500,800,1500]
    >>> d = {800:3, 1500:1, 500:4}
    >>> [d[x] for x in l]
    [4, 3, 1]
    

    【讨论】:

    • 可能还使用d.get 和默认值,以防万一您不希望在缺少某些内容时在如此大的列表上引发错误(尽管您可能会这样做)。
    • @Mr.F:OP 说这是一个默认字典,所以我们不必担心缺失值异常。如果有的话,我们还有另一个问题,那就是如果存在关键分歧,我们可能会得到一个我们不想要的值..
    • 好点。我更倾向于您的解决方案中使用的结构,它只使用dict 而不是defaultdict
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多