【问题标题】:Sorting a dictionary by highest value of nested list按嵌套列表的最大值对字典进行排序
【发布时间】:2016-04-30 03:30:15
【问题描述】:
dict = {a:[2, 4, 5], b:[4, 6, 7], c:[3, 1, 1]}

以上面为例,我将如何排序和打印这个dict,所以它显示为:

>>>sorthighest(dict)
b : 7
a : 5
c : 3

我很确定解决这个问题的方法是在 for: 循环中按照 max(dict[i]) 的方式做一些事情,但我什么也做不了。

【问题讨论】:

  • 您是否只希望输出中的最高值,而您希望将剩余部分也保留在某处?
  • @bereal 只是最高值

标签: python sorting python-3.x dictionary


【解决方案1】:
for i in sorted(dict, key= lambda x: max(dict[x]), reverse=True):
    print(i,max(dict[i]))

【讨论】:

    【解决方案2】:

    不要使用名称dict,它会影响内置字典。您可以创建一个字典,将您的原始键映射到子列表的最大值:

    >>> d_max = {k:max(d[k]) for k in d}
    >>> d_max
    {'a': 5, 'c': 3, 'b': 7}
    

    然后遍历该字典的排序项:

    >>> for k, v in sorted(d_max.items(), key=lambda x: x[1], reverse=True):
    ...     print('{} : {}'.format(k,v))
    ... 
    b : 7
    a : 5
    c : 3
    

    编辑:如果您从不需要d_max 字典来查找最大值,我们可以进一步简化:

    >>> for k,v in sorted(((max(d[k]), k) for k in d), reverse=True): 
    ...     print('{} : {}'.format(v,k))
    ... 
    b : 7
    a : 5
    c : 3
    

    【讨论】:

      【解决方案3】:

      字典是无序的。要创建有序字典,请使用collections.OrderedDict,如下所示:

      from collections import OrderedDict
      
      d = {'a': [2,4,5], 'b': [4,6,7], 'c': [3,1,1]}
      modified = {k: max(v) for k, v in d.items()}
      answer = OrderedDict(sorted(modified.items(), key=lambda x: x[1], reverse=True))
      print(answer)
      

      输出

      OrderedDict([('b', 7), ('a', 5), ('c', 3)])
      

      然后您可以轻松地遍历您的 ordered 字典,如下所示:

      for k, v in answer.items():
          print('{} : {}'.format(k, v))
      

      输出

      b : 7
      a : 5
      c : 3
      

      【讨论】:

        【解决方案4】:

        编辑:现在它还返回键。

        sorted([(i,max(dict[i])) for i in dict], reverse=True, key=lambda x:x[1])
        

        返回:

        [('b', 7), ('a', 5), ('c', 3)]
        

        【讨论】:

        • 你说得对,我误解了他只想要最高值。
        猜你喜欢
        • 2021-03-08
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多