【问题标题】:How to reverse order of keys in python dict?如何反转python dict中键的顺序?
【发布时间】:2011-07-24 06:13:18
【问题描述】:

这是我的代码:

a = {0:'000000',1:'11111',3:'333333',4:'444444'}

for i in a:
    print i

它显示:

0
1
3
4

但我希望它显示:

4
3
1
0

那么,我该怎么办?

【问题讨论】:

  • 字典没有订单。键的排列顺序似乎只是靠运气(以及您不能依赖的实现细微差别。)没有固有的顺序。

标签: python dictionary reverse


【解决方案1】:

试试:

for i in sorted(a.keys(), reverse=True):
    print i

【讨论】:

    【解决方案2】:

    字典是无序的,所以你不能反转它们。当前输出的顺序是任意的。

    也就是说,您当然可以订购钥匙:

    for i in sorted(a.keys(), reverse=True):
        print a[i];
    

    但这为您提供了 排序 键的相反顺序,不一定是添加键的相反顺序。 IE。如果您的字典是,它不会给您1 0 3

    a = {3:'3', 0:'0', 1:'1'}
    

    【讨论】:

    • 仅供参考,Python 3.7+ 中的字典似乎实际上记住了插入顺序(source)
    【解决方案3】:
    for i in reversed(sorted(a.keys())):
        print i
    

    【讨论】:

    • 我认为这是一个“糟糕”的答案,因为提问者显然对 python dicts 的功能存在误解,应该解决这种误解,而不是给他一些“看起来像”他的东西想要。
    • 你说得对,我应该更仔细地阅读这个问题。
    • 赞成:StackExchange 不是惩教机构。 ifLoop 展示了如何提供帮助而不仅仅是正确。
    【解决方案4】:

    迭代的顺序键是任意的。它们按顺序排列只是巧合。

    >>> a = {0:'000000',1:'11111',3:'333333',4:'444444'}
    >>> a.keys()
    [0, 1, 3, 4]
    >>> sorted(a.keys())
    [0, 1, 3, 4]
    >>> reversed(sorted(a.keys()))
    <listreverseiterator object at 0x02B0DB70>
    >>> list(reversed(sorted(a.keys())))
    [4, 3, 1, 0]
    

    【讨论】:

    • 您实际上可以通过使用sorted(a.keys(), reverse=True) 而不是使用内置的reversed() 来加快反转大小写的速度。
    【解决方案5】:

    Python 字典没有与之关联的任何“顺序”。 dict 打印相同的顺序只是一个“巧合”。无法保证字典中的项目以任何顺序出现。

    如果您想处理排序,您需要将字典转换为列表。

    a = list(a) # keys in list
    a = a.keys() # keys in list
    a = a.values() # values in list
    a = a.items() # tuples of (key,value) in list
    

    现在您可以正常排序列表,例如a.sort(),也可以反转它,例如a.reverse()

    【讨论】:

    • 这只会将键放在一个列表中。你会失去价值观。
    • +1 用于解释所有其他答案实际上都在转换为列表。
    【解决方案6】:

    Python dict 在 2.x 中没有排序。但是3.1 中有一个有序的 dict 实现。

    【讨论】:

    【解决方案7】:

    试试看,

    输入: a = {0:'000000',1:'11111',3:'333333',4:'444444'}

    [x for x in sorted(a.keys(), reverse=True)]

    输出: [4, 3, 1, 0]

    【讨论】:

      【解决方案8】:

      由于 Python 3.7 dicts 保留顺序,这意味着您现在可以这样做:

      my_dict = {'a': 1, 'c': 3, 'b': 2}
      
      for k in reversed(list(my_dict.keys())):
          print(k)
      

      输出:

      b
      c
      a
      

      由于 Python 3.8 内置的 reversed() 也接受字典,因此您可以使用:

      for k in reversed(my_dict):
          print(k)
      

      【讨论】:

      • 忽略额外的) 会导致SyntaxError,dictviews 也只在Python 3.8 中变得可逆,所以reversed(my_dict.keys()) 将在Python 3.7 中引发TypeError
      • @Harmon758 感谢您指出这一点!答案现在应该已经确定了。
      • 小注:在reversed(list(my_dict.keys()))中,.keys()可以省略,因为dict迭代器返回它的键。
      【解决方案9】:

      在我使用的 Python 3.6 中,我在函数更新的帮助下将键的顺序与它们各自的值颠倒了。

      original_dict={'A':0,'C':2,'B':1}
      new_dict={}
      for k,v in original_dict.items():
          dict_element={k:v}
          dict_element.update(new_dict)
          new_dict=dict_element
      
      print(new_dict)
      

      应该打印出来:

      {'B':1,'C':2,'A':0}
      

      我的 2 美分。

      【讨论】:

        【解决方案10】:

        如果您想保留插入顺序而不是字母顺序,那么您可以使用:

        dict(list(your_dict.keys())[::-1])

        或者对于整个字典:

        dict(list(your_dict.items())[::-1])

        【讨论】:

          【解决方案11】:

          如果你有这样的字典

          {'faisal2': 2, 'umair': 2, 'fais': 1, 'umair2': 1, 'trending': 2, 'apple': 2, 'orange': 2}
          

          并且你想反向排序字典,你可以使用:

          dict(sorted(counts.items(), key=lambda item: item[1],reverse=True))
          

          输出将是:

          {'faisal2': 2, 'umair': 2, 'trending': 2, 'apple': 2, 'orange': 2, 'fais': 1, 'umair2': 1}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-09-12
            • 1970-01-01
            • 1970-01-01
            • 2017-09-05
            • 2015-07-22
            • 2015-11-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多