Python 在字典中查找第n个最大值的键
给一本这样的字典:Python 在字典中查找第n个最大值的键,python,algorithm,dictionary,Python,Algorithm,Dictionary,给一本这样的字典:example_dict={“mark”:13,“steve”:3,“bill”:6,“linus”:11} 使用max(示例\u dict.items(),key=operator.itemgetter(1))和使用min(示例\u dict.items(),key=operator.itemgetter(1))查找具有最大值的键很容易。 找到第n个最大值的键的最简单方法是什么?e、 g.此处第二大值的键是linus使用: 输出 linus 从文件中: 返回由定义的数据集中
example_dict={“mark”:13,“steve”:3,“bill”:6,“linus”:11}
使用max(示例\u dict.items(),key=operator.itemgetter(1))
和使用min(示例\u dict.items(),key=operator.itemgetter(1))查找具有最大值的键很容易。
找到第n个最大值的键的最简单方法是什么?e、 g.此处第二大值的键是linus
使用:
输出
linus
从文件中:
返回由定义的数据集中n个最大元素的列表
难以忍受。键(如果提供)指定一个参数的函数
用于从iterable中的每个元素中提取比较键(用于
例如,key=str.lower)
关于性能的说明,也来自文档:
对于较小的n值,性能最佳。对于
值越大,使用sorted()函数的效率越高。
另外,当n==1时,使用内置的min()和
max()函数。如果需要重复使用这些功能,
考虑把迭代变成一个实际的堆。< /P>
请注意,它返回一个列表,这就是为什么要放弃第一个
n-1
元素使用QuickSelect算法。它平均在O(n)下工作如下:
def nth_largest_key(di, n):
sorted_items = sorted(di.items(), key=lambda item: item[1],
reverse=True)
return sorted_items[n-1][0]
input_di = {"mark":13, "steve":3, "bill":6, "linus":11}
print(nth_largest_key(input_di, int(input().strip())))
列出所有值,然后找到第三大值。然后在字典中搜索所有具有该值的键。我想排序是最快的方法。至少找不到最大值,请删除它并再次搜索。所以我会选择前者,排序和搜索注意,如果存在重复的值,那么min和max的代码就不起作用。他们只会返回其中一个副本,而不是全部。@ErikvandeVen:不。第n个最大元素的选择问题已知比排序“更容易”,并且已知O(n)最坏情况时间算法。@YvesDaoust但只是出于好奇:这只在只有一个第n个元素要提取时才算,对吗?您指的是quickselect?quickselect与QuickSort一样,在最坏的情况下运行于
O(n^2)
def nth_largest_key(di, n):
sorted_items = sorted(di.items(), key=lambda item: item[1],
reverse=True)
return sorted_items[n-1][0]
input_di = {"mark":13, "steve":3, "bill":6, "linus":11}
print(nth_largest_key(input_di, int(input().strip())))