Étant donné le dictionnaire suivant:
dct = {'a':3, 'b':3,'c':5,'d':3}
Comment puis-je appliquer ces valeurs à une liste telle que:
lst = ['c', 'd', 'a', 'b', 'd']
afin d'obtenir quelque chose comme:
lstval = [5, 3, 3, 3, 3]
Vous pouvez utiliser une compréhension de liste pour cela:
lstval = [ dct.get(k, your_fav_default) for k in lst ]
Je propose personnellement d’utiliser la compréhension de liste par rapport à la variable map
intégrée, car elle semble familière à tous les programmeurs Python, elle est plus facile à analyser et à étendre si une valeur par défaut personnalisée est requise.
Vous pouvez parcourir les clés de votre liste en utilisant la fonction map
:
lstval = list(map(dct.get, lst))
Ou si vous préférez comprendre la liste:
lstval = [dct[key] for key in lst]
lstval = [d[x] for x in lst]
Ne nommez pas votre dictionnaire dict
. dict
est le nom du type.
N'utilisez pas dict
comme nom de variable, car elle a été intégrée.
>>> 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]
Je voudrais utiliser une compréhension de la liste:
listval = [dict.get(key, 0) for key in lst]
La partie .get(key, 0)
est utilisée pour renvoyer une valeur par défaut (0 dans ce cas) si aucun élément avec cette clé n'existe dans dict
.
Dans la documentation de Python 3:
dict.items()
"Retourne une nouvelle vue des éléments du dictionnaire ((clé, valeur) pairs)" https://docs.python.org/3/library/stdtypes.html#dict.items Zip()
peut être utilisé avec l’opérateur * pour décompresser un fichier list" https://docs.python.org/3/library/functions.html#ZipDonc, Zip(*d.items())
donne votre résultat.
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)