Powiedz max()
jak obliczyć maksimum dla sekwencji indeksów:
max(xrange(len(ld)), key=lambda index: ld[index]['size'])
To będzie powrót indeksu do którego klucz size
jest najwyższa:
>>> ld = [{'prop': 'foo', 'size': 100}, {'prop': 'boo', 'size': 200}]
>>> max(xrange(len(ld)), key=lambda index: ld[index]['size'])
1
>>> ld[1]
{'size': 200, 'prop': 'boo'}
Jeśli chciał, że słownik przez cały czas, następnie można po prostu użyć:
max(ld, key=lambda d: d['size'])
i dostać zarówno indeks i słownika, można użyć enumerate()
tutaj:
max(enumerate(ld), key=lambda item: item[1]['size'])
Niektóre bardziej demoing:
>>> max(ld, key=lambda d: d['size'])
{'size': 200, 'prop': 'boo'}
>>> max(enumerate(ld), key=lambda item: item[1]['size'])
(1, {'size': 200, 'prop': 'boo'})
Funkcja key
przepuszcza każdego elementu w sekwencji wejściowej kolei , a max()
wybierze element, w którym zwracana wartość tej funkcji jest najwyższa.
Użycie osobnej listy do wyodrębnienia wszystkich wartości size
, a następnie odwzorowanie, że powrót do pierwotnej listy nie jest zbyt wydajne (trzeba teraz dwukrotnie powtórzyć listę). list.index()
nie może działać, ponieważ musi pasować do całego słownika, a nie tylko do jednej wartości.
Dzięki za odpowiedz, dodałem pewne treści, co myślisz o? Potrzebuję łatwiejszego rozwiązania. Twoje jest niesamowite, ale łatwiejsze do zrozumienia byłoby miłe! – Kvash
Wiele się uczę od twojej odpowiedzi. Dzięki za to. – Kvash