我有一个以元组作为键的字典,并且我想获得最大可用值,例如当前字典中元组键的第二个元素。例如,给定:返回字典中元组键的给定元素的最大值
my_dict = {('a', 1):value_1, ('b', 1):value_2, ('a', 2):value_3, ('c', 3):value_4, ('b', 2):value_5}
所以按键的第二个元素的最大值为3
什么是推导这个值最快的方法?
我有一个以元组作为键的字典,并且我想获得最大可用值,例如当前字典中元组键的第二个元素。例如,给定:返回字典中元组键的给定元素的最大值
my_dict = {('a', 1):value_1, ('b', 1):value_2, ('a', 2):value_3, ('c', 3):value_4, ('b', 2):value_5}
所以按键的第二个元素的最大值为3
什么是推导这个值最快的方法?
或者:
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)
是发电机返回只有那些在给定的子集密钥。
如果您寻找最大价值,即3使用这样的:如果你有关于任何的附加信息
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]
:
print max(my_dict.keys(), key = lambda x: x[1])[1]
如果您是从字典找最大的价值,用这个任何集合中的元素之间的任何关系(如在这种情况下的字典键),那么你必须检查每个元素=>复杂度O(n)
(线性) - 唯一的改进可以使用一些内置函数,如max
如果您需要经常获取(或弹出)最大值,那么请考虑不同的结构(如heap
)。
你的意思是你想要与第二个元素最大的键相关联的字典值,或者你想要关键元组本身的第二个元素?也就是说,在你的例子中,你想要3还是你想'value_4'? – BrenBarn
@BrenBarn,我想要关键元组本身的第二个元素,所以在我的例子中,我想要3个。 – MLister