Форум сайта python.su
0
Здравствуйте. Есть 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}}
Отредактировано Kurtz (Май 10, 2016 11:32:54)
Офлайн
53
Kurtz
цикл for
Офлайн
0
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)
Офлайн
857
>>> 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') >>>
Офлайн
0
junga_py
ValueError: could not convert string to float: mark.metts@enron.com
('NaN', 'WROBEL BRUCE')
Отредактировано Kurtz (Май 10, 2016 12:57:02)
Прикреплённый файлы:
final_project_dataset.pkl (43,5 KБ)
Офлайн
0
Вроде получилось:
>>> 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']
Отредактировано Kurtz (Май 10, 2016 16:39:55)
Офлайн
857
Короче, надо словарь сначала правильно составить, подготовить к поиску.
Офлайн
0
py.user.next
Ваше решение было изначально правильным, я просто не учел что в Python str считается больше чем int или float, поэтому max() всегда вернет ‘NaN’ или любой другой str вместо числового значения:
>>> d = [10, 100, 0, 1000, 'str'] >>> print max(d) str
Офлайн
857
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() >>>
Офлайн
0
Я пока в 2.7 работаю. В третьем убрали, наверное.
Офлайн