【问题标题】:Ordered Dictionary in PythonPython中的有序字典
【发布时间】:2014-04-19 01:47:59
【问题描述】:

我在 Python 中有一个字典,例如: dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}

有什么方法可以保持这本字典的顺序以这种方式表达。我已经阅读了几个论坛,其中大多数都建议使用 OrderedDict()。但正如这里所解释的:

Python OrderedDict not keeping element order

OrderedDict(dict) 不会在字典以这种形式编写时保持顺序。我无法以特定方式手动创建字典(例如元组列表),因为它是由其他地方的代码随机生成的。 非常感谢您的帮助!!

【问题讨论】:

  • 如果您的字典是“由其他地方的代码随机生成的”,那么您要准确保留什么顺序?您已经失去了在“其他地方的代码”中排序的任何概念。换句话说,“保持这本字典的顺序”没有意义 - 字典没有排序
  • 不要用类型的名称来命名你的变量,即不要称它为dict

标签: python dictionary


【解决方案1】:

在你写dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}的那一刻,你已经失去了元素的顺序。保存方法:

一个。首先从您的数据创建OrderedDict

b.将您的 dict 转换为元组列表并以您想要的方式排序,然后从中创建 OrderedDict

总而言之,从您的问题来看,您并不清楚您要保留什么。如果它是“随机”生成的,那么谁在乎,如果它背后有一些逻辑,那么使用这个逻辑重新创建该订单并使用它创建OrderedDict。如果幕后发生了什么事情从一些输入数据创建了这个字典,那么,唉,你看到它的顺序不是它被创建的顺序。

PS 并且不要调用你的字典 dict

【讨论】:

    【解决方案2】:

    如果您要订购的字典是在您的控制之外创建的,您可以使用以下方法将其 key:value 对作为元组列表获取:

    pairs = my_dict.items()
    

    然后,您可以按您喜欢的任何方式对该列表进行排序。完成后,您可以将有序对列表传递给 OrderedDict 构造函数

    from collections import OrderedDict
    # sort in some way (for example, reverse the key order)
    pairs = reversed(my_dict.items())
    ordered = OrderedDict(pairs)
    

    【讨论】:

      【解决方案3】:

      只需将 2 用于:

      dict = {'a':4, 'q':1, 'l':2, 'm':4, 'p':1}
      
      i = max(dict.values())+1
      for el in range (i):
          for letter in dict:
              if el==dict[letter]:
                  print(letter,dict[letter])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 2013-05-01
        • 2012-04-22
        • 2018-12-14
        • 2014-05-05
        • 2010-11-22
        相关资源
        最近更新 更多