【问题标题】:create ordered dict from list comprehension?从列表理解创建有序字典?
【发布时间】:2015-05-22 01:45:40
【问题描述】:

Here is a list comprehension:

L = [{k: d[k](v) for (k, v) in l.iteritems()} for l in L]

在哪里

  • L 是有序字典的列表(即 collections.OrderedDict 的对象),其中字典具有相同的键集。

  • d 是另一个有序字典,它也具有与之前的有序字典相同的键集。

  • 对于每个keyd[key]是一个可以应用于L[i][key]的函数,即d[key](L[i][key])

所有给定的字典都是有序的字典,并且在它们的键中具有相同的顺序。

但是代码会创建一个无序的字典。如何以与给定有序字典相同的键顺序创建有序字典?

【问题讨论】:

    标签: python python-2.7 dictionary


    【解决方案1】:

    collections.OrderedDict 只不过是一个 dict,它会记住元素包含在其中的顺序。所以你可以像这样用它的构造函数创建一个

    [OrderedDict((k, d[k](v)) for (k, v) in l.iteritems()) for l in L]
    

    【讨论】:

    • 为什么没有订购字典? from collections import OrderedDict dict1 = OrderedDict({x: x**5 for x in (1, 5, 10)}).__class__ ord_dict = OrderedDict({x: x**5 for x in (1, 5, 10)}) print(ord_dict) # OrderedDict([(1, 1), (10, 100000), (5, 3125)])
    • @RohitDhankar 您已经为您的案例创建了一个字典。数据在内存中已经是无序的。 OrderedDict与这里的意外订单无关。
    【解决方案2】:

    Python 字典与 C++ 字典不同,它是无序的,因为它的键使用哈希。另一种选择是使用名为collections.OrdredDict 的python 字典的有序特化。

    这会将你的声明变成

    from collections import OrderedDict
    L = [OrderedDict((k, d[k](v)) for (k, v) in l.iteritems()) for l in L]
    

    【讨论】:

      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2019-01-16
      • 2018-06-17
      • 1970-01-01
      • 2018-02-28
      相关资源
      最近更新 更多