如何通过其值来排序字典而不将其更改为元组列表

时间:2018-04-11 01:03:20

标签: python

我目前正在为我的机器人团队制作一个程序,打印出一个团队密钥(一个字符串)和一个排序有多好的值。所以我当前的输出是一个字典,其中团队键作为键,值作为值。但是字典没有排序。我已经读过你可以把它改成我曾经尝试和工作过的元组列表,但我只有一个问题。目前团队密钥在团队编号前面有'frc',我通过[3:]删除它。但是,当我对元组列表执行相同操作时,它不起作用。所以我想知道是否有办法按字符串对字典进行排序而不将其更改为元组列表?

2 个答案:

答案 0 :(得分:2)

您可以在排序后将项目添加到有序的字典中:https://docs.python.org/2/library/collections.html#collections.OrderedDict

但是如果你想使用一个元组,改变一个值将不起作用,因为它们是不可变的。但是,您可以在创建它之前进行切片。

(这里的最新答案的延伸:Python 3 sort a dict by its values

s = [(k[3:], d[k]) for k in sorted(d, key=d.get, reverse=True)]

答案 1 :(得分:0)

mydict = {'frc1':40,'frc2':2,'frc3':1,'frc4':3}

for key, value in sorted(mydict.iteritems(), key=lambda (k,v): (k[3:], v)):
    print "%s: %s" % (key, value)

输出:

frc1: 40  
frc2: 2  
frc3: 1  
frc4: 3 

如果我没有正确地解决你的问题,这应该有效:)

lambda functions非常神奇