【问题标题】:Sorting Values in a dictionary to retrieve the maximum value for each key对字典中的值进行排序以检索每个键的最大值
【发布时间】:2015-04-05 22:26:52
【问题描述】:

例如:我的字典如下:

dic = {'bob':['0,5,1'], 'annie':['2,4,0'], 'charles':['0,7,0']}

我希望能够:

首先:对键进行排序,使其按字母顺序排列

其次:对每个键的值进行排序,以便选择最大值

我期望的结果是:

annie:4
bob:5
charles:7

我已经做了很长时间了,只能打印出总和最大的整个列表。例如,使用我当前的代码,我得到了这个:

[2, 4, 0]
[2, 4, 0]
[2, 4, 0]

这是因为程序会找到总和最大的列表,并为字典中的每个键打印出来。我为此使用了max(dic.values())

非常感谢您的帮助和最有效的方法。谢谢你

【问题讨论】:

  • 侯赛因,不客气!答案解决了你的问题吗?

标签: python-3.x


【解决方案1】:

值应该是整数列表,而不是字符串列表。

In [29]: dic = {'bob':[0,5,1], 'annie':[2,4,0], 'charles':[0,7,0]}

In [30]: for k in sorted(dic.keys()):
    print k, max(dic[k])
   ....:     
annie 4
bob 5
charles 7

【讨论】:

  • 非常感谢,非常感谢。
【解决方案2】:

您可以使用OrderedDictsorted 函数:

>>> from collections import OrderedDict
>>> d=OrderedDict()
>>> dic_ = {'bob':['0,5,1'], 'annie':['2,4,0'], 'charles':['0,7,0']}
>>> for i,j in sorted((i,max(j[0].split(','))) for i,j in dic_.items()):
...      d[i]=j
... 
>>> d
OrderedDict([('annie', '4'), ('bob', '5'), ('charles', '7')])

【讨论】:

    【解决方案3】:

    我不明白为什么每个值都是一个只有一个元素的列表,它是一个字符串。这是一个解决方案,但如果该值是元素列表或逗号分隔的字符串,则更有意义。

    for key in sorted(dic.keys()):
        print(key + ":" + str(max(dic[key][0].split(','))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 2011-07-08
      • 1970-01-01
      • 2019-06-25
      相关资源
      最近更新 更多