【问题标题】:Reversing dictionary by key doesn't work按键反转字典不起作用
【发布时间】:2010-10-04 18:02:48
【问题描述】:

我有以下字典:
{2009: [12, 11, 10, 9], 2010: [1]}

我正在尝试对其进行反向排序,以便 2010 年排在第一位。这是代码:

def dictSort(dict):
    items = dict.items()
    items.sort(reverse=True)
    dict = {}
    for item in items:
        dict[item[0]] = item[1]
    return dict

但作为回报,我得到了相同的字典。直到 for 循环一切看起来都很好。这是为什么呢?

【问题讨论】:

    标签: python sorting dictionary


    【解决方案1】:

    字典键没有排序。将 dict 视为一组键/值对。

    这将在 Python 3.1 中出现: http://docs.python.org/dev/library/collections.html#collections.OrderedDict

    【讨论】:

    • 注意:OrderedDict 也在 Python 2.7 中。 (早期版本可以使用recipe)。
    【解决方案2】:

    字典是无序的,无论您放入其中的任何内容都不会按照您添加的顺序存储。

    如果你想按排序的顺序对其做某事,你可以这样做:

    items = dict.items.sort(reverse=True)
    for item in items:
        doSomething(item,mydict[item])
    

    for key,value in iter(sorted(mydict.iteritems(),reverse=True))
         doSomething(key,value)
    

    【讨论】:

    • dict.items 是一个函数,而不是一个属性; sort 就地工作,因此您无法评估其输出(即无)。也许对于 sorted(mydict.items()) 中的项目: ...
    【解决方案3】:

    字典没有顺序。如果您尝试按特定顺序输出字典,请尝试抓取所有键,对它们进行排序,然后使用该列表来了解输出内容的顺序。

    【讨论】:

      【解决方案4】:

      这里有一种方法以相反的键顺序生成 dict 项(顺便说一句,请不要使用 dict 作为变量名!):

      def dict_sort(thisdict, reverse=True):
          return ((key, thisdict[key]) for key in sorted(thisdict, reverse=reverse))
      
      mydict = {2009: [12, 11, 10, 9], 2010: [1]}
      for i in dict_sort(mydict):
          print "%i: %s" % i
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-10
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多