【问题标题】:how to change the order of OrderedDict? [duplicate]如何更改 OrderedDict 的顺序? [复制]
【发布时间】:2016-04-10 11:27:50
【问题描述】:

这里的任何人都知道如何在 python 中更改顺序字典变量的顺序。 我试图改变键列表的顺序,但它没有改变字典的顺序。

例如我想改变 d
的顺序 改为 ['e','a','b','c','d'] 而不是 ['a','b','c','d','e']

d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'
d['d'] = 'D'
d['e'] = 'E'

【问题讨论】:

    标签: python dictionary indexing


    【解决方案1】:

    您需要创建一个与 d 相同类型的新对象。这里我使用type(d),在这种情况下当然是OrderedDict

    >>> import collections
    >>> d = collections.OrderedDict()
    >>> d['a'] = 'A'
    >>> d['b'] = 'B'
    >>> d['c'] = 'C'
    >>> d['d'] = 'D'
    >>> d['e'] = 'E'
    >>> new_order = ['e','a','b','c','d'] 
    >>> type(d)((k, d[k]) for k in new_order)
    OrderedDict([('e', 'E'), ('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D')])
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 python3,您不必必须创建一个新字典。

      你可以使用OrderedDict.move_to_end:

      将现有键移动到有序字典的任一端。如果 last 为 true(默认值),则项目将移至右端,如果 last 为 false,则将项目移至开头。如果键不存在则引发 KeyError <...>

      示例(将 e 移动到字典的开头以实现您的输出):

      >>> d = OrderedDict()
      >>> for c in 'ABCDE':
      ...     d[c.lower()] = c
      ...
      >>> d
      OrderedDict([('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D'), ('e', 'E')])
      >>> d.move_to_end('e',last=False) # last=False moves to beginning
      >>> d
      OrderedDict([('e', 'E'), ('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D')])
      

      【讨论】:

        【解决方案3】:

        您必须创建另一个OrderedDict

        new_keys = ['e','a','b','c','d']
        new_dict = collections.OrderedDict()
        for i in new_keys:
            new_dict[i] = d[i]
        

        【讨论】:

          猜你喜欢
          • 2012-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-21
          • 2023-03-14
          相关资源
          最近更新 更多