我有一个字典,其中键是字符串,值是整数。我必须首先返回一个具有较小值的键的列表。如果出现平局,则首先按字典顺序返回键。
例如,考虑将名称映射到权重的字典。
d={'Tony':78,'Steve':88,'Bruce':68,'Thor':78,'Bob':50}
然后结果列表应为:
['Bob','Bruce','Thor','Tony','Steve']
因为Thor以字典形式出现在Tony之前。
我如何做到这一点?
答案 0 :(得分:0)
相当容易:
result = sorted(d, key=lambda k: (d[k], k))
如果dict
很大,可能值得通过直接迭代项目并使用dict
翻转键和值进行排序来避免每键itemgetter
查找,然后删除结果中的值:
from operator import itemgetter
results = list(map(itemgetter(0), sorted(d.items(), key=itemgetter(1, 0))))
答案 1 :(得分:0)
如果你想按名称打破平局,首先按值排序然后按键:
from operator import itemgetter
print(list(map(itemgetter(0), sorted(d.items(), key=itemgetter(1,0)))))
['Bob', 'Bruce', 'Thor', 'Tony', 'Steve']
或常规名单comp:
print([k for k,_ in sorted(d.items(), key=itemgetter(1, 0))])