У меня есть словарь, где каждый ключ является кортежем значений, я хочу использовать метод sorted()
для сортировки словаря на самом первом элементе моего кортежа. Мой код выглядит так:Как отсортировать словарь по первому элементу ключа (tuple)
def mapData(header_list, dict_obj):
master_dict = {}
client_section_list = []
for element in header_list:
for row in dict_obj:
if (row['PEOPLE_ID'], row['DON_DATE']) == element:
client_section_list.append(row)
element = list(element)
element_list = [client_section_list[0]['DEDUCT_AMT'],
client_section_list[0]['ND_AMT'],
client_section_list[0]['DEDUCT_YTD'],
client_section_list[0]['NONDEDUCT_YTD']
]
try:
element_list.append((float(client_section_list[0]['DEDUCT_YTD']) +
float(client_section_list[0]['NONDEDUCT_YTD'])
))
except ValueError:
pass
element.extend(element_list)
element = tuple(element)
master_dict[element] = client_section_list
client_section_list = []
return sorted(master_dict, key=lambda key: key[master_dict[(1)]]
Последняя строка, где я пытаюсь найти способ ее сортировки. Мой кортеж выглядит следующим образом:
(312178078,6/22/15,25,0,25,0,25.0)
Что не так с кодом, который у вас есть? –
Если ключи являются кортежами, то по умолчанию будет отсортирован по первому элементу этих кортежей. Но если вы _need_ для предоставления ключевой функции, попробуйте «lambda key: key [0]». Наконец, обратите внимание, что 'sorted (some_dict)' будет возвращать _ только ключи_ в отсортированном порядке, а не весь dict, т. Е. Вы теряете значения! –
Вы хотите использовать 'dict.items()' в 'sorted', если ваша цель - сохранить всю структуру словаря. 'return sorted (master_dict.items(), key = lambda key: key [0] [0])' должен делать то, что вы хотите. – cziemba