我有一个字典,其中的键是字符串,值是整数。我必须返回一个列表,其中首先有小值的键。在平局的情况下,按字母顺序排列的关键字将被退回。如何按值和键对字典进行排序?
例如,考虑将名称映射到权重的字典。
d={'Tony':78,'Steve':88,'Bruce':68,'Thor':78,'Bob':50}
然后将得到的名单应该是:
['Bob','Bruce','Thor','Tony','Steve']
由于雷神谈到托尼之前,按字典。
我该如何做到这一点?
我有一个字典,其中的键是字符串,值是整数。我必须返回一个列表,其中首先有小值的键。在平局的情况下,按字母顺序排列的关键字将被退回。如何按值和键对字典进行排序?
例如,考虑将名称映射到权重的字典。
d={'Tony':78,'Steve':88,'Bruce':68,'Thor':78,'Bob':50}
然后将得到的名单应该是:
['Bob','Bruce','Thor','Tony','Steve']
由于雷神谈到托尼之前,按字典。
我该如何做到这一点?
如果你想打破由名字的领带,在前排序值,那么关键:
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))])
相当容易:
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))))
我发布目标是先按值排序,然后键,所以我编辑使用两个。 – ShadowRanger
['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。 –