返回字典中元组键的给定元素的最大值

时间:2012-06-09 19:32:23

标签: python dictionary tuples

我有一个以元组为键的dict,我想获得可用的最大值,比如当前在字典中的元组键的第二个元素。例如,给定:

my_dict = {('a', 1):value_1, ('b', 1):value_2, ('a', 2):value_3, ('c', 3):value_4, ('b', 2):value_5}

所以键的第二个元素的最大值是3。

获取此值的最快方法是什么?

3 个答案:

答案 0 :(得分:5)

或者:

largest_key = max(my_dict, key=lambda x: x[1])

或者:

from operator import itemgetter
largest_key = max(my_dict, key=itemgetter(1))

根据DSM,直接迭代dict比检索和迭代keys()viewkeys()要快。

我认为Zverina女士正在谈论的是将您的数据结构从带有dict密钥的tuple转换为以下内容:

my_dict = {
    'a': {
            1: value_1,
            2: value_3
         }
    'b': {
            1: value_2,
            2: value_5
         }
    'c': {
            3: value_4
         }
}

这样,如果您想要使用a找到所有值的最大值,您可以这样做:

largest_key = max(d['a'])

无需额外费用。 (您的数据已经分为子集,因此每次进行搜索时都不必浪费计算构建子集。)

修改

要将搜索限制为给定的子集,请执行以下操作:

>>> subset = 'a'
>>> largest_key_within_subset = max((i for i in my_dict if i[0] == subset), key=itemgetter(1))

其中(i for i in my_dict if i[0] == subset)是一个只返回给定子集中的键的生成器。

答案 1 :(得分:1)

如果您寻找最大值,即3使用此:

print max(my_dict.keys(), key = lambda x: x[1])[1]

如果您正在寻找dict中最大的值,请使用:

my_dict = {('a', 1):'value_1', ('b', 1):'value_2', ('a', 2):'value_3', ('c', 3):'value_4', ('b', 2):'value_5'}

largest = max(my_dict.keys(), key = lambda x: x[1])
print my_dict[largest]

答案 2 :(得分:1)

如果您没有关于任何集合中的元素之间的任何关系的其他信息(在这种情况下像字典中的键),那么您必须检查每个元素=>复杂性O(n)(线性) - 唯一的改进可能是使用某些内置函数,如max

如果您经常需要获取(或弹出)最大值,请考虑不同的结构(如heap)。