如何从一个非常大的字典中获取最大密钥

时间:2012-02-23 01:57:14

标签: python-2.7

我制作了一个包含大量数据的字典。我已经绘制了键(y轴)与其中的值(x轴)。我在这个情节中有几个高峰。我想从那个图中得到那些峰的键和它们的相应值。

我用过这个 进口经营者 max(dA.iteritems(),key = operator.itemgetter(1))[0]

但它只给我一个最大值。 请帮忙。

3 个答案:

答案 0 :(得分:0)

要获取最大值的所有实例,请使用以下代码:

a=max(dA.iteritems(), key = operator.itemgetter(1)) #finds the max value
print [b for b in dA.keys() if dA[b]==a[1]]
#the above line iterates through the keys of dA and returns all
#x values where the y associated with that x is equal to a[1], the max value.

但是,您需要找到峰值。你做的是:

a=dA.items()
result=[] #we will store the answer in here
for i in range(1, len(a)):
    if a[i-1][1]<a[i][1] and a[i][1]>a[i+1][1]: #if there is a peak
        result.append(a[i]) #add the x-value and the y-value to the list
print result

答案 1 :(得分:0)

试试这个:

import operator

def dict_top_n_subset(d, n):
    """Given a dict d, return a subset dict with the top n value"""
    n = min(n, len(d))
    return dict(sorted(d.iteritems(), key=operator.itemgetter(1))[-n:])

使用示例:

>>> d={1:5, 2:10, 3:7, 4:73, 5:6}
>>> dict_top_n_subset(d, 1)
{4: 73}
>>> dict_top_n_subset(d, 2)
{2: 10, 4: 73}
>>> dict_top_n_subset(d, 3)
{2: 10, 3: 7, 4: 73}

请记住,如果您的字典是巨大的,这可能会占用大量内存(2倍?),在这种情况下,您可能需要手动迭代并跟踪自己的峰值 - 但这比2行更难代码。

答案 2 :(得分:0)

import heapq
import operator
dict(heapq.nlargest(n, data_dict.iteritems(), key=operator.itemgetter(1)))

使用heapq.nlargest有效地查找按值排序的n最高键值对。