Я пытаюсь преобразовать словарь в список значений / кортежей. У меня есть такой код:

list_to_sort = sorted(dictionary.items())
    lst = list(list_to_sort)
    print(lst)

На выходе получается [('a', 9), ('b', 17), ('c', 17), ('d', 3)]. Однако я хочу переключить значения, чтобы на выходе получилось следующее:

[(9, 'a'), (17, 'b'), (17, 'c'), (3, 'd')]

Как мне это сделать?

3
JJJ 14 Июн 2021 в 21:31

5 ответов

Лучший ответ

Попробуй это:

dict1 = {'a':9, 'b':17, 'c':17, 'd':3}
print([item[::-1] for item in sorted(dict1.items())])

Выход:

[(9, 'a'), (17, 'b'), (17, 'c'), (3, 'd')]
2
Chandella07 14 Июн 2021 в 18:42
[ (v,k) for k,v in sorted(D.items()) ]
3
Tasos Papastylianou 14 Июн 2021 в 18:38

Вы можете просто сделать это:

lst = [(val,key) for key,val in lst]
3
C.Nivs 14 Июн 2021 в 18:45

Определенно, есть способ сделать это лучше, чем я предлагаю, но попробуйте использовать приведенный ниже код:

list_to_sort = sorted(dictionary.items())
lst = list( map(lambda x,y : (y,x) , list(list_to_sort)) )

Плюс, попробуйте это и так list( map(lambda x,y : (y,x) , list_to_sort) ). Это немного чище, но я не уверен, работает ли он на 100%.

1
ARK1375 14 Июн 2021 в 18:35

Есть вариант:

d = {'b': 11, 'a': 14, 'd': 30, 'c': 17}
*res, = map(lambda x: (d[x], x), sorted(d))
print(res)

Выход:

[(14, 'a'), (11, 'b'), (17, 'c'), (30, 'd')]
1
TigerTV.ru 14 Июн 2021 в 19:12