Возвращает максимум первого значения ввода, перебирая ключи в словаре

Я бы хотел получить максимум первого значения 10,40 -> 40. Я могу использовать это ниже, но есть ли способ Python в одной строке вместо цикла for

    soilLayer[0] = [ 10,    50,    0.3,   1600, 1800,    5,  30 ]
    soilLayer[1] = [ 40,    50,    0.3,   1600, 1800,    5,  30 ]
    heigth = []
    position = 0
    for name in sorted( soilLayer.keys() ):
        heigth.append( soilLayer[name][position] )
    print( max( heigth ) )
2
0
42
2

Ответы 2

во-первых, вам не нужно сортировать, когда вы хотите найти максимум. Вы можете использовать operator.itemgetter, чтобы получить сразу несколько предметов, и заархивировать их, чтобы получить первые предметы. Затем вы можете все max на результат.

from operator import itemgetter

max(next(zip(*itemgetter(*soilLayer.keys())(soilLayer)))
max(next(zip(*itemgetter(*soilLayer.keys())(soilLayer))) - чрезвычайно запутанный способ сделать max(vs[0] for vs in soilLayer.values()), или, если на то пошло, max(map(itemgetter(0), soilLayer.values()))
juanpa.arrivillaga 11.04.2018 12:32

большое спасибо, я буду использовать это без импорта: max (vs [0] для vs в грунтеLayer.values ​​())

Abe 12.04.2018 13:50

Также возможно нефункциональное решение:

soilLayer = {0: [ 10,    50,    0.3,   1600, 1800,    5,  30 ],
             1: [ 40,    50,    0.3,   1600, 1800,    5,  30 ]}

res = max(list(zip(*soilLayer.values()))[0])  # 40

Это менее эффективно, чем Функциональное решение @ Kasramvd.


Другой способ, если вам нравится использовать стороннюю библиотеку, - использовать numpy:

import numpy as np

res = np.array(list(soilLayer.values()))[:, 0].max()  # 40.0

Другие вопросы по теме