2009-02-23 5 views
7

Gibt es eine prägnante Art und Weise dies in Python zu tun ?:Was ist die Pythonic-Methode, um zwei Sequenzen zu einem Wörterbuch zu kombinieren?

def toDict(keys, values): 
    d = dict() 
    for k,v in zip(keys, values): 
    d[k] = v 

    return d 
+0

Zusammen mit den richtigen Antworten, die Sie bisher für die Technik hatten, werde ich darauf hinweisen, dass 'to_dict' bei der Benennung einer Funktion mehr Pythonic als 'toDict' ist. Siehe [PEP 8] (http://www.python.org/dev/peps/pep-0008 "PEP 8") für die Stilempfehlungen zum Schreiben von Python-Code. – bignose

+0

+1 für jemanden zu helfen, der eindeutig "den Weg" interessiert. – physicsmichael

+0

Danke für das Heads-up. Dies würde jedoch eher in einer wikifizierten Frage nach dem Vorbild von "Python-Coding Style Guidelines" liegen. – guillermooo

Antwort

42

Ja:

dict(zip(keys,values)) 
+0

Das ist ziemlich kompakt! Vielen Dank! – guillermooo

4

Wenn keys eine 'Größe dann values größer sein kann', dann könnten Sie itertools.izip_longest (Python 2.6), die einen Standardwert für den Rest der Tasten angeben kann:

from itertools import izip_longest 

def to_dict(keys, values, default=None): 
    return dict(izip_longest(keys, values, fillvalue=default)) 

Beispiel:

>>> to_dict("abcdef", range(3), 10) 
{'a': 0, 'c': 2, 'b': 1, 'e': 10, 'd': 10, 'f': 10} 

HINWEIS: itertools.izip*() Funktionen im Gegensatz zu der zip() Funktion Rückkehr Iteratoren keiner Listen.

Verwandte Themen