Получить максимальные значения словаря с ключами до достижения заданного предела - PullRequest
0 голосов
/ 21 ноября 2018

заданный словарь и ограничение на количество ключей для нового словаря.В новом словаре у нас должно быть наибольшее количество значений из данного словаря.

задано:

dict = {'apple':5, 'pears':4, 'orange':3, 'kiwi':3, 'banana':1

Я хочу получить новый словарь с наибольшим значением с ключом.

new это

{'apple':5} 

, потому что должен быть только один

, если предел равен 2.

{'apple':5, 'pears':4}

, потому что есть три значения, нопредел 2, мы ничего не берем.Я попытался

, если ограничение равно 3. Это все еще

{'apple':5, 'pears':4}

, потому что я не могу добавить оранжевый.Если я добавлю, это будет больше, чем предел.

new = {}
while len(new) < limit:

, тогда я должен добавить самое высокое значение с ключом в новом, пока я не достигну предела.Я не должен добавлять ключ, если он будет больше, чем предел.

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Весь код, являющийся функцией:

def f(d,limit):
   return dict(sorted(d.items(),key=lambda x: -x[1])[:limit])

А теперь:

print(f(d,1))

Это:

{'apple': 5}

И:

print(f(d,2))

Is:

{'apple': 5, 'pears': 4}

Обратите внимание, что если словарь всегда сортируется по значениям, подобным имеющемуся у вас сейчас, выполните:

def f(d,limit):
    return dict(d.items()[:limit])
0 голосов
/ 21 ноября 2018

Вы можете просто использовать most_common() из collections.Counter():

from collections import Counter

def largest(dct, n):
    return dict(Counter(dct).most_common(n))

print(largest(dct={'apple':5, 'pears':4, 'orange':3, 'kiwi':3, 'banana':1}, n=2))
# {'apple': 5, 'pears': 4}

print(largest(dct={'apple':5, 'pears':4, 'orange':3, 'kiwi':3, 'banana':1}, n=3))
# {'apple': 5, 'pears': 4, 'orange': 3}

Или даже с heapq.nlargest():

from heapq import nlargest
from operator import itemgetter

def largest(dct, n):
    return dict(nlargest(n, dct.items(), key=itemgetter(1)))

print(largest(dct={'apple':5, 'pears':4, 'orange':3, 'kiwi':3, 'banana':1}, n=2))
# {'apple': 5, 'pears': 4}

print(largest(dct={'apple':5, 'pears':4, 'orange':3, 'kiwi':3, 'banana':1}, n=3))
# {'apple': 5, 'pears': 4, 'orange': 3}
0 голосов
/ 21 ноября 2018

Я считаю, что ваша проблема в том, что у вас есть

while len(new) < limit: 

оно должно быть while len(new) <= limit:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...