Как получить максимальный ключ из очень большого словаря - PullRequest
0 голосов
/ 23 февраля 2012

Я сделал словарь, который содержит огромное количество данных.Я изобразил ключи (ось Y) против значений (ось X) из него.У меня есть несколько пиков в этом сюжете.Я хочу получить ключи и их соответствующие значения для этих пиков из этого графика.

Я использовал этот оператор импорта max (dA.iteritems (), key = operator.itemgetter (1)) [0]

, но он дает только одно максимальное значение.Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 02 ноября 2012

Попробуйте это:

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}

Имейте в виду, что это может использовать много памяти (2x?), Если ваш диктат огромен, и в этом случаеВы можете вручную итерировать и отслеживать свои собственные пики - но это намного сложнее, чем две строки кода.

0 голосов
/ 11 апреля 2014
import heapq
import operator
dict(heapq.nlargest(n, data_dict.iteritems(), key=operator.itemgetter(1)))

Используйте heapq.nlargest для эффективного поиска пар * ключ-значение n, упорядоченных по значению.

0 голосов
/ 11 апреля 2012

Чтобы получить все значения максимального значения, используйте этот код:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...