如何在字典中找到包含一个值的最后一个外观的键(Python)

时间:2013-12-31 19:06:05

标签: python dictionary

我有以下字典: some_dic = {65:5,67:5,69:5} 我想得到一个保存最后一个值的键。 例如:

>> some_dic.keys()
dict_keys([65, 67, 69])
in this example, I would like to get 69. 

我该怎么做? 我试图将some_dic.keys()转换为列表,然后使用函数reverse() 但当然,它不会导致任何地方..

6 个答案:

答案 0 :(得分:4)

标准词典中的“最后出现”没有意义;字典是无序的。假设您的意思是指具有该值的最大键,您可以执行类似

的操作
>>> some_dic = {65:5, 67:5, 69:5, 71:3}
>>> find_v = 5
>>> max(k for k,v in some_dic.items() if v == find_v)
69

答案 1 :(得分:1)

python中的

dict没有订购。因此,不应该尝试任何此类事情

您可能想要做的是找到一种替代数据结构,可能是OrderedDict

答案 2 :(得分:1)

这不能用词典表示,因为它们没有订购。

例如,假设some_dic是:

some_dic = {65: 5, 67: 5, 69: 5, 70 : 5, 50 : 5, 40 : 5, 66 : 5}

您可能希望获得66作为答案,因为它是5的最后一个外观,但keys是:

print some_dic.keys()

>>> [65, 66, 67, 69, 70, 40, 50]

您可能想要使用OrderedDict

答案 3 :(得分:0)

字典不是有序的,所以这个“最后”键没有任何意义。您可以使用和OrderedDict解决这个问题。但是,在这种情况下,您似乎只想找到最高键。

这样做的一种方法:

max(key for key in some_dic if some_dic[key] == 5)

答案 4 :(得分:0)

在Python3中,dict.keys()返回一个类似于集合的对象,而不是列表,因此这里的排序顺序是巧合。要获得最大密钥,您可以使用以下代码:

>>> some_dic = {65: 5, 67: 5, 69: 5}
>>> some_dic.keys()
dict_keys([65, 67, 69])
>>> max(some_dic.keys())
69

但听起来你实际上是在要求最大的键值为5.这只是稍微复杂一些,可以使用生成器表达式来完成:

>>> some_dic = {65: 5, 67: 5, 69: 5}
>>> max( k for k, v in some_dic.items() if v == 5 )
69
>>> some_dic = {65: 5, 67: 5, 69: 5, 70: 6}
>>> max( k for k, v in some_dic.items() if v == 5 )
69

答案 5 :(得分:0)

有点像你想要的那样:

sorted(some_dic.keys())[-1]

那将返回69,因为那是.keys()方法返回的列表中的最后一个元素。