Минимальная длина/максимальное значение Python в словаре списков

Пришлось переписать вопрос из-за изменившихся требований.

У меня есть словарь, например:

d = {'a': [4, 2], 'b': [3, 4], 'c': [4, 3], 'd': [4, 3], 'e': [4], 'f': [4], 'g': [4]}

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

В этом случае должны возвращаться ключи с наименьшей длиной (наименьшая длина списков в этом словаре).

'e, 'f', 'g'

И те, у кого наибольшее значение (сумма целых чисел в каждом списке), должны возвращаться

'b' 'c'

я пытался

min_value = min(dict.itervalues())
min_keys = [k for k in d if dict[k] == min_value]

Но это не дает мне желаемого результата.

Любые идеи?

Спасибо!


person user1530318    schedule 30.07.2012    source источник
comment
Похоже, что операция фильтрации может вам помочь.   -  person Wug    schedule 31.07.2012
comment
Вы только что задали этот вопрос, но изменили одну маленькую деталь.   -  person Blender    schedule 31.07.2012
comment
возможный дубликат минимального значения Python в словаре списков   -  person Wooble    schedule 31.07.2012


Ответы (1)


def get_smallest_length(x):
    return [k for k in x.keys() if len(x.get(k))==min([len(n) for n in x.values()])]

def get_largest_sum(x):
    return [k for k in x.keys() if sum(x.get(k))==max([sum(n) for n in x.values()])]

x = {'a': [4, 2], 'c': [4, 3], 'b': [3, 4], 'e': [4], 'd': [4, 3], 'g': [4], 'f': [4]}

print get_smallest_length(x)
print get_largest_sum(x)

Возвращает:

['e', 'g', 'f']
['c', 'b', 'd']
person garnertb    schedule 30.07.2012