【问题标题】:Dictionary sorting and removing字典排序和删除
【发布时间】:2014-12-11 02:34:45
【问题描述】:

我被困在字典和 python 中的排序上,我在字典中存储了以下值:

{'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112}

我想:

1) 对这些进行排序,使它们按最高分优先排序,最低分
2)从字典中删除分数,只留下名字

例如,在上面的示例中,函数应该返回:

['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA']

【问题讨论】:

    标签: python sorting dictionary


    【解决方案1】:

    您可以使用sorted 轻松做到这一点:

    >>> d = {'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112}
    >>> sorted(d, key=d.get, reverse=True)
    ['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA']
    >>>
    

    请注意,输出是一个名称列表。您不能在 Python 中对字典或集合进行排序,因为它们都是自然无序的。

    【讨论】:

    • 很高兴知道,不知道您可以对字典进行排序!
    • @ReutSharabani - 您无法对字典进行排序。这只是遍历字典的键并将它们收集到一个排序列表中,使用dict.get 来确定顺序。
    • 我知道,我的意思是直接在字典键上使用sorted。另一方面,您可以像 listtuple 一样迭代它们,所以为什么不...
    【解决方案2】:

    你可以这样做:

    d1 = {'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112}
    print([n for n,s in sorted(d1.items(), key=lambda v:v[1], reverse=True)])
    

    结果:

    ['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA']
    

    【讨论】:

      【解决方案3】:

      不可能对字典进行排序,因为字典是无序的,但其他类型(例如列表和元组)则不是。但是你可以有一个排序的表示。

      例如,

      import operator
      x = {first: 2, second: 4, third:3, fourth:1, fifth:0}
      sorted_x = sorted(x.items(), key=operator.itemgetter(1))
      

      或者你也可以这样做

      sorted(x.values()) to get a sorted representation.
      

      【讨论】:

        【解决方案4】:

        保留 dic 并对其进行排序的选项:

        >>>from collections import OrderedDict
        
        >>> # regular unsorted dictionary
        >>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
        
        >>> # dictionary sorted by key
        >>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
        OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
        
        >>> # dictionary sorted by value
        >>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
        OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
        
        >>> # dictionary sorted by length of the key string
        >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
        OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
        

        详细信息:sorted 有 r​​everse(bool) arg,例如:

        >>> OrderedDict(sorted(d.items(), key=lambda t: t[0], reverse = True))
        OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
        

        使用正常:

        >>> dic = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
        >>> dic['banana']
        3
        

        字体:https://docs.python.org/2/library/collections.html#ordereddict-examples-and-recipes

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-15
          • 2017-02-05
          • 2021-09-02
          • 1970-01-01
          • 1970-01-01
          • 2018-10-10
          • 1970-01-01
          • 2023-01-18
          相关资源
          最近更新 更多