Страницы

Поиск по вопросам

среда, 14 ноября 2018 г.

Сортировать список и удалить элементы, по которым велась сортировка

Имеется такой словарь:
{'L': [(568.0, 'John'), (208.0, 'Jack'), (88.0, 'Leopold'), (448.0, 'Sonny'), (328.0, 'Julian')], 'R': [(1478.0, 'Diana'), (1238.0, 'Din'), (998.0, 'Mary'), (1118.0, 'Veronica'), (1357.0, 'Richard')]}
С помощью этого кода:
for key in dictionary: dictionary[key].sort() for i in range(len(dictionary[key])): dictionary[key][i] = dictionary[key][i][1]
Он сортируется и становится вот такого вида:
{'L': ['Leopold', 'Jack', 'Julian', 'Sonny', 'John'], 'R': ['Mary', 'Veronica', 'Din', 'Richard', 'Diana']}
То есть производится сортировка по возрастанию чисел (первых элементов кортежей), после чего эти числа удаляются. Каким образом можно еще сортировать эти списки, чтобы получился точно такой же результ? Мой код просто вырви глаз, если честно.


Ответ

мне кажется использовать тут .items() или .values() излишне
{k: [l[1] for l in sorted(_dict[k])] for k in _dict}
дополню коментарием по ответу Ilia w495 Nikitin
чем плохо использование lambda в map - это всегда длинее другого варианта
# сравните result_list = map(lambda value: value[1], value_list) result_list = list(result_list) # тоже, но без map короче на 5 символов result_list = [value[1] for value in value_list] # даже если записать for+append в одну строку, все равно короче result_list = [] for value in value_list: result_list.append(value) # если функция для map уже определена(как str), тут и следует использовать map print('
'.join(map(str, result_list)))

Комментариев нет:

Отправить комментарий