我制作了一个包含大量数据的字典。我已经绘制了键(y轴)与其中的值(x轴)。我在这个情节中有几个高峰。我想从那个图中得到那些峰的键和它们的相应值。
我用过这个 进口经营者 max(dA.iteritems(),key = operator.itemgetter(1))[0]
但它只给我一个最大值。 请帮忙。
答案 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
最高键值对。