230 votes

Python: Liste de Dictionnaire

Disons que j'ai une liste a en Python dont les entrées idéalement carte à un dictionnaire. Chaque même élément représente la clé du dictionnaire, et le suivant étrange élément est la valeur

par exemple,

a = ['hello','world','1','2']

et je voudrais le convertir en un dictionnaire, b, où

b['hello'] = 'world'
b['1'] = '2'

Qu'est-ce que la syntaxe est plus propre façon d'accomplir cette?

307voto

kindall Points 60645
b = dict(zip(a[0::2], a[1::2]))

Si a est grande, vous aurez probablement envie de faire quelque chose comme ce qui suit, ce qui ne veut pas faire de temporaire listes comme ci-dessus.

from itertools import izip
i = iter(a)
b = dict(izip(i, i))

En Python 3, vous pouvez également utiliser un dict compréhension, mais paradoxalement, je pense que la façon la plus simple de le faire, ce sera avec range() et len(), ce qui serait normalement une odeur de code.

b = {a[i]: a[i+1] for i in range(0, len(a), 2)}

Si l' iter()/izip() méthode est certainement la plus Pythonic en Python 3, bien que, comme EOL notes dans un commentaire, zip() est déjà paresseux en Python 3 de sorte que vous n'avez pas besoin d' izip().

i = iter(a)
b = dict(zip(i, i))

Si vous le souhaitez sur une ligne, vous aurez à tricher et utiliser un point-virgule. ;-)

69voto

JobJob Points 531

Une autre option (avec l'aimable autorisation de Alex Martelli http://stackoverflow.com/a/2597178/104264):

dict(x[i:i+2] for i in range(0, len(x), 2))

Aussi, si vous avez ceci:

a = ['bi','double','duo','two']

et vous voulez que ce (chaque élément de la liste de l'incrustation d'une valeur donnée (2 dans ce cas)):

{'bi':2,'double':2,'duo':2,'two':2}

vous pouvez utiliser:

>>> dict((k,2) for k in a)
{'double': 2, 'bi': 2, 'two': 2, 'duo': 2}

19voto

Chris Arena Points 765

Vous pouvez utiliser un dict de la compréhension pour ce joli facilement:

a = ['hello','world','1','2']

my_dict = {item : a[index+1] for index, item in enumerate(a) if index % 2 == 0}

C'est l'équivalent de la boucle ci-dessous:

my_dict = {}
for index, item in enumerate(a):
    if index % 2 == 0:
        my_dict[item] = a[index+1]

5voto

sahhhm Points 2957

Peut-être pas le plus pythonic, mais

>>> b = {}
>>> for i in range(0, len(a), 2):
        b[a[i]] = a[i+1]

1voto

Stefan Gruenwald Points 494

Vous pouvez aussi faire comme ceci (chaîne de conversion de liste ici, puis la conversion à un dictionnaire)

    string_list = """
    Hello World
    Goodbye Night
    Great Day
    Final Sunset
    """.split()

    string_list = dict(zip(string_list[::2],string_list[1::2]))

    print string_list

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X