У меня есть следующий Dict:
defaultdict(<class 'list'>, {'A': [('ID1', 'Frank', 7), ('ID2', 'Peter', 1), ('ID3', 'Geoerge', 6)], 'B': [('ID1', 'FrankGeorge', 2)], 'C': [('ID1', 'Renz', 10), ('ID10', 'Mueller', 5), ('ID7', 'Dan', 2)]})
Для каждого ключа в dict мне нужны кортежи, отсортированные по третьему элементу. Это ожидаемый результат:
{'A': [('ID2', 'Peter', 1), ('ID3', 'Geoerge', 6), ('ID1', 'Frank', 7)], 'B': [('ID1', 'FrankGeorge', 2)], 'C': [ ('ID7', 'Dan', 2), ('ID10', 'Mueller', 5),('ID1', 'Renz', 10), ]}
Я попытался запустить функцию сортировки, но она только отсортировала словарь, изменив порядок клавиш. Это не то, чего я хочу. Порядок ключей должен быть одинаковым. А,В,С - это только пример. Это может быть намного больше, чем это.
Пытаться:
from collections import defaultdict
d = defaultdict(
list,
{
"A": [("ID1", "Frank", 7), ("ID2", "Peter", 1), ("ID3", "Geoerge", 6)],
"B": [("ID1", "FrankGeorge", 2)],
"C": [("ID1", "Renz", 10), ("ID10", "Mueller", 5), ("ID7", "Dan", 2)],
},
)
for v in d.values():
v.sort(key=lambda k: k[2])
print(d)
Отпечатки:
defaultdict(<class 'list'>, {'A': [('ID2', 'Peter', 1), ('ID3', 'Geoerge', 6), ('ID1', 'Frank', 7)], 'B': [('ID1', 'FrankGeorge', 2)], 'C': [('ID7', 'Dan', 2), ('ID10', 'Mueller', 5), ('ID1', 'Renz', 10)]})
Для Python 3.7+ словари сохраняют порядок.
from collections import defaultdict
d = defaultdict(
list,
{
'A': [('ID1', 'Frank', 7), ('ID2', 'Peter', 1), ('ID3', 'Geoerge', 6)],
'B': [('ID1', 'FrankGeorge', 2)],
'C': [('ID1', 'Renz', 10), ('ID10', 'Mueller', 5), ('ID7', 'Dan', 2)]
}
)
sortedD = defaultdict(list, {k: sorted(v, key=lambda item: item[2]) for k, v in d.items()})
print(sortedD)
Ожидаемый результат
defaultdict(<class 'list'>, {'A': [('ID2', 'Peter', 1), ('ID3', 'Geoerge', 6), ('ID1', 'Frank', 7)], 'B': [('ID1', 'FrankGeorge', 2)], 'C': [('ID7', 'Dan', 2), ('ID10', 'Mueller', 5), ('ID1', 'Renz', 10)]})