Python 在字典中搜索最大值,然后抓取关联的键

Python 在字典中搜索最大值,然后抓取关联的键,python,Python,我需要帮助从字典中获取最大值。我有一个{num:[状态,值]…}字典,需要获取与最高值相关的所有内容 #find max value in dictionary td = {0: ['b',3], 1: ['b',6], 4: ['b',2], 3: ['b',5] } #In this example td dict, I want to grab the key and state associated with the highest value, 6. I want to grab "1

我需要帮助从字典中获取最大值。我有一个{num:[状态,值]…}字典,需要获取与最高值相关的所有内容

#find max value in dictionary
td = {0: ['b',3], 1: ['b',6], 4: ['b',2], 3: ['b',5] }
#In this example td dict, I want to grab the key and state associated with the highest value, 6. I want to grab "1: ['b',6]"
print td
print td.keys()
print td.values()
maxval = max([v for k,[s,v] in td.iteritems()])
print maxval #correctly prints 6
关键参数接受一个函数,如果使用它,将生成使该函数最大化的值

关键参数接受一个函数,如果使用它,它将生成最大化该函数的值。

只需更改您对
max()
的理解,即可生成值作为第一个元素的元组:

>>> max((v, k, s) for k, (s, v) in td.iteritems())
(6, 1, 'b')
因此,您的代码可能如下所示:

maxval, maxnum, maxstate = max((v, k, s) for k, (s, v) in td.iteritems())
只需更改您的
max()
理解,以生成值作为第一个元素的元组:

>>> max((v, k, s) for k, (s, v) in td.iteritems())
(6, 1, 'b')
因此,您的代码可能如下所示:

maxval, maxnum, maxstate = max((v, k, s) for k, (s, v) in td.iteritems())
当然你也可以得到这样的值

>>> td[max(td, key=lambda k:td[k][1])]
['b', 6]
当然你也可以得到这样的值

>>> td[max(td, key=lambda k:td[k][1])]
['b', 6]

+1但是我认为你应该解释“魔力”(关于元组上的元素顺序)好的,太好了!因此max()查看元组/列表中的第一个元素。k,(s,v)和k,[s,v]之间的区别是什么?我从不使用元组,总是使用列表。我猜这个习惯是从试图在意外事件中修改一个元组,然后意识到列表可以作为可以修改的元组。有没有什么理由我不想使用一个可以使用元组的列表?为了解释获取元组序列的最大值,元组(和其他序列)按字典顺序进行比较;比较第一项;如果它们相同,则比较第二项,依此类推。您可以在文档中看到这一点。至于使用元组而不是列表来解包序列,在这里没有什么区别。我习惯在序列解包中使用元组,但使用列表可能更合适,因为它模仿原始数据结构。+1但我认为您应该解释“魔力”(关于元组上的元素顺序)好的,太好了!因此max()查看元组/列表中的第一个元素。k,(s,v)和k,[s,v]之间的区别是什么?我从不使用元组,总是使用列表。我猜这个习惯是从试图在意外事件中修改一个元组,然后意识到列表可以作为可以修改的元组。有没有什么理由我不想使用一个可以使用元组的列表?为了解释获取元组序列的最大值,元组(和其他序列)按字典顺序进行比较;比较第一项;如果它们相同,则比较第二项,依此类推。您可以在文档中看到这一点。至于使用元组而不是列表来解包序列,在这里没有什么区别。我习惯在序列解包中使用元组,但使用列表可能更合适,因为它模仿原始数据结构。您确定只有一个(k,s,v)三元组达到最大v吗?您确定只有一个(k,s,v)三元组达到最大v吗?