对字典中的值进行排序以检索每个键的最大值

时间:2015-04-05 22:26:53

标签: python-3.x

例如:我的字典如下:

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())

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

3 个答案:

答案 0 :(得分:0)

您可以使用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')])

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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