Уведомления

Группа в Telegram: @pythonsu

#1 Май 10, 2016 11:32:26

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

Здравствуйте. Есть dict:

>>> data = {'John': {'salary': 365788, 'to_messages': 807, 'deferral_payments': 'NaN', 'total_payments': 1061827},
            'Peter': {'salary': 284896, 'to_messages': 624, 'deferral_payments': 'NaN',  'total_payments': 4583126}}

Как найти наибольшее значение total_payments с соответствующим именем?

Отредактировано Kurtz (Май 10, 2016 11:32:54)

Офлайн

#2 Май 10, 2016 12:19:22

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

Kurtz
цикл for

Офлайн

#3 Май 10, 2016 12:23:57

junga_py
Зарегистрирован: 2016-03-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

data = {'John': {'salary': 365788, 'to_messages': 807, 'deferral_payments': 'NaN', 'total_payments': 1061827}, 'Peter': {'salary': 284896, 'to_messages': 624, 'deferral_payments': 'NaN',  'total_payments': 4583126}}
max = list(list(data.values())[0].values())[0]
for x in data.values():
    for y in x.values():
        w = float(y)
        if max < w:
            max = w
print(max)

Офлайн

#4 Май 10, 2016 12:44:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

>>> data = {'John': {'salary': 365788,
...                  'to_messages': 807,
...                  'deferral_payments': 'NaN',
...                  'total_payments': 1061827},
...         'Peter': {'salary': 284896,
...                   'to_messages': 624,
...                   'deferral_payments': 'NaN',
...                   'total_payments': 4583126}}
>>> 
>>> max((data[i]['total_payments'], i) for i in data)
(4583126, 'Peter')
>>>



Офлайн

#5 Май 10, 2016 12:49:03

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

junga_py

ValueError: could not convert string to float: mark.metts@enron.com

py.user.next
('NaN', 'WROBEL BRUCE')

Ответ вроде должен быть (103559793, ‘LAY KENNETH L’).

Общий файл в приложении. Нужно было это сразу сделать, прошу прощения за предоставление неполной информации.

Отредактировано Kurtz (Май 10, 2016 12:57:02)

Прикреплённый файлы:
attachment final_project_dataset.pkl (43,5 KБ)

Офлайн

#6 Май 10, 2016 13:46:38

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

Вроде получилось:

>>> max_total_payments = max([enron_data[e]['total_payments'] for e in enron_data if e != 'TOTAL' if enron_data[e]['total_payments'] != 'NaN'])
>>> person_with_max_total_payments = [name for name in enron_data if enron_data[name]['total_payments'] == max_total_payments]
>>> print max_total_payments, person_with_max_total_payments
103559793 ['LAY KENNETH L']
Спасибо всем за помощь! py.user.next, вы мне дали правильное направление поиска.

Отредактировано Kurtz (Май 10, 2016 16:39:55)

Офлайн

#7 Май 10, 2016 14:14:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

Короче, надо словарь сначала правильно составить, подготовить к поиску.



Офлайн

#8 Май 10, 2016 14:42:22

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

py.user.next
Ваше решение было изначально правильным, я просто не учел что в Python str считается больше чем int или float, поэтому max() всегда вернет ‘NaN’ или любой другой str вместо числового значения:

>>> d = [10, 100, 0, 1000, 'str']
>>> print max(d)
str

Офлайн

#9 Май 10, 2016 14:51:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

Kurtz
в Python str считается больше чем int или float
Это уже давно не работает. Какой-то пережиток из второго питона, который убрали уже.
>>> '' > 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() > int()
>>> 
>>> b'' > 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: bytes() > int()
>>>

Нужно исключить строки из сравнений чисел.



Офлайн

#10 Май 10, 2016 15:28:39

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти max value с определенным именем в dict

Я пока в 2.7 работаю. В третьем убрали, наверное.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version