我有一个以元组为键的字典,我想获得可用的最大值,例如字典中当前元组键的第二个元素。例如,给定:
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
直接迭代 a 比检索和迭代keys()
or更快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))
where(i for i in my_dict if i[0] == subset)
是只返回给定子集中的键的生成器。
如果您正在寻找最大值,即 3,请使用:
print max(my_dict.keys(), key = lambda x: x[1])[1]
如果您正在从字典中寻找最大值,请使用以下命令:
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]
如果您没有关于任何集合中元素之间的任何关系的其他信息(例如在这种情况下的字典中的键),那么您必须检查每个元素 => 复杂性O(n)
(线性) - 唯一的改进可以是使用一些内置函数,例如max
如果您经常需要获取(或弹出)最大值,请考虑不同的结构(如heap
)。