说我有以下代码制作一个字典:
x = 0
myHash = {}
name = ["Max","Fred","Alice","Bobby"]
while x <= 3:
myHash[name[x]] = x
x += 1
l = sorted(myHash.values(), reverse=True)
largestNum = l[0]
# print myHash.getKeyFromValue(largestNum)
是否可以轻松获取与largestNum
变量配对的密钥而不循环整个字典?类似于底部行中的伪代码。
注意:我不想从密钥中获取值。我希望与此相反。
答案 0 :(得分:1)
不要只对values
进行排序。按items
排序values
,免费获取密钥。
from operator import itemgetter
l = sorted(myHash.items(), key=itemgetter(1), reverse=True)
largestKey, largestNum = l[0]
注意:如果您只想要最大值而不是其他排序结果,则可以保存一些工作并跳过完整的sorted
工作(将工作从O(n log n)
减少到{{1} }):
O(n)
对于反转largestKey, largestNum = max(myHash.items(), key=itemgetter(1))
的一般情况,如果值是唯一的,那么创建反向映射是微不足道的:
dict
如果值不是唯一的,并且您希望通过单个查找找到与单个值对应的所有键,则您将反转为多字典:
invert_dict = {v: k for k, v in orig_dict.items()}