2012-04-13 2 views
2

У меня есть словарь, который может иметь различное количество ключей. Значение ключей - это список чисел. Я хочу сравнить каждый из этих списков и получить список, который является максимальным для всех элементов в списке.Как передать динамическое число аргументов функции?

встроенный в макс() функция даст мне максимум всех элементов, если я передал его в пути ниже:

макс (Lista, LISTB, listc)

Количество списков изменяется и мой словарь выглядит примерно так:

myDict = {1: Lista, 2: LISTB: 3: listc, ...}

Я думал или что-то вроде этого:

maxlist = max (для элемента в myDict.keys(): myDict [item])

Но я не думаю, что это сработает. Пожалуйста помоги!

+0

не самый лучший способ сделать это, но у вас работал бы, если вы сказали ... maxlist = тах ([myDict [x] для x в myDict.keys()]) – jcfollower

ответ

1

Правильный синтаксис выражения генератора будет

maxlist = max(myDict[item] for item in myDict.keys()) 

Было бы намного проще в этом случае использовать myDict.values() в первую очередь:

maxlist = max(myDict.values()) 
+0

Это работает и для меня. Я закончил использование выражения генератора из-за того, как у меня был установлен словарь. для полосы в aptData [файл] .keys(): \t \t для канала в aptData [файл] [BAND] .keys(): \t \t \t для режима в aptData [файл] [группы] [канала ].ключи(): \t \t \t \t TXPWR = макс (aptData [образец] [группа] [канал] [режим] [0] для образца в aptData.keys()) – emad

1

Как о:

>>> p = {1: [2,3], 4: [5,6,7]} 
>>> max(p.values()) 
[5, 6, 7] 

Для словарей values() возвращает значения, чтобы вы не объясняли неизбежно нужно перебирать все ключевые слова в словаре.

+0

это работает ... не думаю, что это было легко ... я чувствую себя смущенным :( – emad

0

данный словарь спам, вы можете найти максимум как

max(spam.values(),key=len) 

Теперь ваш вопрос немного неоднозначным в том смысле, как к тому, что в том, что чей максимальный вы хотите найти

выше вернется вы, длина списка, которые имеют максимальные элементы (aka length is maximum)

Если вместо этого вы хотите получить максимальный элемент из всех списков (единственный максимальный элемент), вы также можете сделать

max(itertools.chain(*spam.values())) 

Вместо если вы хотите, чтобы найти список, который имеет максимальное значение, которое вы можете сделать

max(spam.values()) 
Смежные вопросы