如何按值和按键对字典进行排序?

时间:2015-12-12 00:28:41

标签: python list dictionary

我有一个字典,其中键是字符串,值是整数。我必须首先返回一个具有较小值的键的列表。如果出现平局,则首先按字典顺序返回键。

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

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

然后结果列表应为:

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

因为Thor以字典形式出现在Tony之前。

我如何做到这一点?

2 个答案:

答案 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))])