2015-12-12 148 views
0

我有一个字典,其中的键是字符串,值是整数。我必须返回一个列表,其中首先有小值的键。在平局的情况下,按字母顺序排列的关键字将被退回。如何按值和键对字典进行排序?

例如,考虑将名称映射到权重的字典。

d={'Tony':78,'Steve':88,'Bruce':68,'Thor':78,'Bob':50} 

然后将得到的名单应该是:

['Bob','Bruce','Thor','Tony','Steve'] 

由于雷神谈到托尼之前,按字典。

我该如何做到这一点?

+0

['map'(https://docs.python.org/2/library/functions.html#map)'('['lambda'] (https://docs.python.org/2/tutorial/controlflow.html#lambda-expressions)'(k,v):k,'''sorted''](https://docs.python.org/2 /library/functions.html#sorted)'(列表(d.' ['项目()'](https://docs.python.org/2/library/stdtypes.html#mapping-types-dict)') ,key = lambda(k,v):(v,k)))',heh。 –

回答

0

如果你想打破由名字的领带,在前排序值,那么关键:

from operator import itemgetter 

print(list(map(itemgetter(0), sorted(d.items(), key=itemgetter(1,0))))) 
['Bob', 'Bruce', 'Thor', 'Tony', 'Steve'] 

或常规列表比较:

print([k for k,_ in sorted(d.items(), key=itemgetter(1, 0))]) 
0

相当容易:

result = sorted(d, key=lambda k: (d[k], k)) 

如果dict是巨大的,它可能是值得的直接迭代的项目和使用itemgetter翻转键和值进行排序,然后删除值避免每个键dict查找在结果:

from operator import itemgetter 

results = list(map(itemgetter(0), sorted(d.items(), key=itemgetter(1, 0)))) 
+0

我发布目标是先按值排序,然后键,所以我编辑使用两个。 – ShadowRanger