Question Créer un dictionnaire avec la compréhension de la liste en Python


J'aime la syntaxe de compréhension de la liste Python.

Peut-il être utilisé pour créer des dictionnaires aussi? Par exemple, en itérant sur des paires de clés et de valeurs:

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work

1025
2017-11-17 10:07


origine


Réponses:


Dans Python 2.6 et versions antérieures, le constructeur de dict peut recevoir une itération de paires clé / valeur:

d = dict((key, value) for (key, value) in iterable)

À partir de Python 2.7 et 3, vous pouvez simplement utiliser dict syntaxe de compréhension directement:

d = {key: value for (key, value) in iterable}

Bien sûr, vous pouvez utiliser l'itérable comme vous le voulez (tuples et littéraux de listes, compréhensions de générateurs, compréhensions de listes, fonctions de générateurs, composition fonctionnelle ... soyez créatifs) tant que chaque élément est lui-même itérable de deux éléments:

d = {value: foo(value) for value in sequence if bar(value)}

def key_value_gen(k):
   yield chr(k+65)
   yield chr((k+13)%26+65)
d = dict(map(key_value_gen, range(26)))

1573
2017-11-17 10:09



Dans Python 3 et Python 2.7+, les définitions de dictionnaire ressemblent à ce qui suit:

d = {k:v for k, v in iterable}

Pour Python 2.6 ou antérieur, voir La réponse de Fortran.


188
2017-11-17 10:22



En fait, vous n'avez même pas besoin de parcourir l'itération si elle comprend déjà une sorte de mapping, le constructeur de dict le fait gracieusement pour vous:

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}

38
2018-05-31 17:48



En Python 2.7, ça va comme:

>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}

Zip les!


28
2017-10-08 02:59



Pour ajouter à la réponse @ fortran, si vous voulez parcourir une liste de clés key_list ainsi qu'une liste de valeurs value_list:

d = dict((key, value) for (key, value) in zip(key_list, value_list))

ou

d = {(key, value) for (key, value) in zip(key_list, value_list)}

13
2018-01-15 00:23



Créer un dictionnaire avec la compréhension de la liste en Python

J'aime la syntaxe de compréhension de la liste Python.

Peut-il être utilisé pour créer des dictionnaires aussi? Par exemple, en itérant   sur des paires de clés et de valeurs:

mydict = {(k,v) for (k,v) in blah blah blah}

En supposant blah blah blah est un itérable de deux-tuples - vous êtes si proche. Créons des "blahs" comme ça:

blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]

Syntaxe de compréhension de dictée:

Maintenant, la syntaxe ici est la partie de cartographie. Qu'est-ce qui en fait un dict compréhension au lieu d'un set la compréhension (qui est ce que votre pseudo-code se rapproche) est le côlon, : comme ci-dessous:

mydict = {k: v for k, v in blahs}

Et maintenant quand vous faites:

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}

Ajouter un filtre:

Tout comme les compréhensions de liste, vous pouvez ajouter une partie de filtre à la fin:

>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}

Ici, nous testons si le dernier caractère est divisible par 2.


10
2018-01-03 21:57



Pour la version python <2.7, procédez comme suit:

d = dict((i,True) for i in [1,2,3])

Pour la version python> = 2.7, procédez comme suit:

d = {i: True for i in [1,2,3]}

9
2018-06-26 09:05



Voici un autre exemple de création de dictionnaire utilisant la compréhension dictée:

Ce que je cherche à faire ici est de créer un dictionnaire de l'alphabet où chaque paire; est la lettre en anglais et sa position correspondante en alphabet anglais

>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in 
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>> 

Notez l'utilisation d'énumérer ici pour obtenir une liste d'alphabets et leurs index dans la liste et permuter les alphabets et les index pour générer la paire de valeur de clé pour le dictionnaire

Espérons que cela vous donne une bonne idée de comp dictionnaire et vous encourage à l'utiliser plus souvent pour rendre votre code compact


6
2017-10-25 03:40