2016-12-29 2 views
1

У меня есть dictionary с people's name и stock value, и я хотел бы получить tuple, состоящий из имени и максимального значения запаса. Вот проблема: некоторая стоимость акций недоступна и вставлена ​​как 'NaN' и, следовательно, я хотел бы их отфильтровать.Как использовать фильтр с устройством-получателем при использовании оператора?

max_stock = max(stock.iteritems(), key=operator.itemgetter(1)) 

Как я могу поместить опцию фильтра в кусок кода?

ответ

3

Вам нужно будет отфильтровать, какие предметы входят в max(). Вы можете использовать выражение генератора есть:

max_stock = max((kv for kv in stock.iteritems() if kv[1] != 'NaN'), 
       key=operator.itemgetter(1)) 

Примите во внимание, что это может поднять ValueError сейчас, если нет, оставшихся после фильтрации пунктов! Вы можете использовать инструкцию try...except для обработки этого случая:

try: 
    max_stock = max((kv for kv in stock.iteritems() if kv[1] != 'NaN'), 
        key=operator.itemgetter(1)) 
except ValueError: 
    # no stock at all 
    max_stock = None