Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字典中查找第n个最大值的键_Python_Algorithm_Dictionary - Fatal编程技术网

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())))