Учитывая следующий словарь:
dct = {'a':3, 'b':3,'c':5,'d':3}
Как я могу применить эти значения к списку, например:
lst = ['c', 'd', 'a', 'b', 'd']
чтобы получить что-то вроде:
lstval = [5, 3, 3, 3, 3]
Учитывая следующий словарь:
dct = {'a':3, 'b':3,'c':5,'d':3}
Как я могу применить эти значения к списку, например:
lst = ['c', 'd', 'a', 'b', 'd']
чтобы получить что-то вроде:
lstval = [5, 3, 3, 3, 3]
Использование map
:
>>> map(dct.get, lst)
[5, 3, 3, 3, 3]
Используя понимание :
>>> [dct[k] for k in lst]
[5, 3, 3, 3, 3]
Вы можете использовать для этого следующее:
lstval = [ dct.get(k, your_fav_default) for k in lst ]
Я лично предлагаю использовать списки для встроенного map
, потому что он выглядит знакомым всем программистам на Python, проще разбирать и расширять его, если требуется значение по умолчанию.
Вы можете перебирать ключи из списка с помощью функции map
:
lstval = list(map(dct.get, lst))
Или, если вы предпочитаете понимание списка:
lstval = [dct[key] for key in lst]
lstval = [d[x] for x in lst]
Не называйте словарь dict
. dict
- это имя типа.
Не используйте имя переменной dict
как оно было встроено.
>>> d = {'a':3, 'b':3,'c':5,'d':3}
>>> lst = ['c', 'd', 'a', 'b', 'd']
>>> map(lambda x:d.get(x, None), lst)
[5, 3, 3, 3, 3]
Я бы воспользовался списком:
listval = [dict.get(key, 0) for key in lst]
Часть .get(key, 0)
используется для возврата значения по умолчанию (в этом случае 0), если в dict
не существует элемента с этим ключом.
В документации Python 3:
dict.items()
"Возвращает новый вид элементов словарей ((ключ, значение)
пары) " https://docs.python.org/3/library/stdtypes.html#dict.itemszip()
в сочетании с оператором * можно использовать для распаковки
список " https://docs.python.org/3/library/functions.html#zipИтак, zip(*d.items())
дайте свой результат.
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(d.items()) # [('a', 1), ('c', 3), ('b', 2), ('d', 4)] in Python 2
# dict_items([('a', 1), ('c', 3), ('b', 2), ('d', 4)]) in Python 3
print(zip(*d.items())) # [('a', 1), ('c', 3), ('b', 2), ('d', 4)] in Python 2
# <zip object at 0x7f1f8713ed40> in Python 3
k, v = zip(*d.items())
print(k) # ('a', 'c', 'b', 'd')
print(v) # (1, 3, 2, 4)