Как объединить словарь + список в один отсортированный список - PullRequest
4 голосов
/ 11 июля 2011

Хорошо, у меня есть словарь, который выглядит следующим образом

z = {'J': 50, 'Q': 30, 'F': 10)

И список, который выглядит следующим образом

l = [('J', 20), ('Q', 10), ('F', 2)]

Как мне объединить их в словарь ИЛИ список, покасохранить мой оригинальный список отсортированным?Я хочу что-то похожее на

l = [('J', 20, 50), ('Q', 10, 30), ('F', 2, 10)]

Спасибо за помощь!

Ответы [ 3 ]

6 голосов
/ 11 июля 2011
z = {'J': 50, 'Q': 30, 'F': 10}
l = [('J', 20), ('Q', 10), ('F', 2)]
print [(a, b, z[a]) for a, b in l]

дает:

[('J', 20, 50), ('Q', 10, 30), ('F', 2, 10)]

Лучше не называть свой список l. От PEP 8 :

Имена, которых следует избегать

Никогда не используйте символы 'l' (строчные буквы el), 'O' (прописные буквы) буква o) или 'I' (заглавная буква глаза) в виде односимвольной переменной имена.

В некоторых шрифтах эти символы неотличимы от цифр один и ноль. Когда возникает искушение использовать «l», вместо этого используйте «L».

0 голосов
/ 11 июля 2011

Улучшение ответа Джены, чтобы некоторые элементы в списке отсутствовали в требовании:

>>> l = [('J', 20), ('Q', 10), ('F', 2), ('A', 5)]
>>> [x + (z.get(x[0]),) for x in l]
[('J', 20, 50), ('Q', 10, 30), ('F', 2, 10), ('A', 5, None)]
0 голосов
/ 11 июля 2011

Для получения списка кортежей вы можете сделать:

[item + (z[item[0]],) for item in l]

Обратите внимание, что z[item[0]] предполагает, что ключ item[0] всегда существует в z.

Для ввода текста попробуйте

dict((item[0], (item[1], z[item[0]])) for item in l)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...