erstellen dict, wo die Tasten sind Buchstaben und Werte sind 1-26 mit dict-comprehension
alphaValueDict = OrderedDict.fromkeys(string.ascii_uppercase,range(0)
i = 1
for k,v in alphaValueDict.iteritems():
alphaValueDict[k] = [i]
i += 1
return alphaValueDict
Brauche ich zum erstellen einer geordneten dict , wo die Tasten sind alle Buchstaben im alphabet und die Werte sind von 1 - 26. Meine Frage ist, wie kann ich mit dict-comprehension, dies zu tun in einer Zeile?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie vermeiden, die dict-comprehension insgesamt:
Mit einem
OrderedDict
:Ich würde verwenden eine dict-comprehension nur, wenn Sie haben zu tun, einige mehr Rechenzeit, um die Schlüssel/Wert-oder wenn es erhöht die Lesbarkeit (extremes Beispiel:
{noun : age for noun, age in something()}
gibt Ihnen eine Idee von was wir reden, währenddict(something())
nicht).ord
ist einfacher und effizienter. Für jeden Namen etwas wie:sum(map(ord, name)) - (ord('a') - 1) * len(name)
.sum(map(ord, name))
wird die Summe der ASCII-Wert. Wenn Sie subtrahieren(ord('a') - 1) * len(name)
Sie bekommen die Summe der Positionen im alphabet(da die Buchstaben im ASCII-zusammenhängend sind und in der Reihenfolge). Man könnte auch schreibensum(ord(letter) - ord('a') + 1 for letter in name)
woord(letter) - ord('a') + 1
ist die position desletter
im alphabet. Aber da du subtrahierenord('a')-1
von jedem element, das Sie nehmen können Sie aus der Summe (daher die(ord('a') - 1) * len(name)
).Mein nehmen auf Sie:
Oder:
count(2, 2)
zählen in 2er aus 2...Verwenden
enumerate()
zum zählen der Buchstaben:Antwort auf die Frage am Ende des post, ein dict-comprehension ist nicht eine angemessene Art und Weise zu initialisieren
OrderedDict
. Dict Verstehens nur schaffen gewöhnlichen Wörterbüchern und wenn Sie das initialisieren Sie IhreOrderedDict
ist es schon zu spät, Sie verloren jede Bestellung.Der einfachste Weg ist die Verwendung von zip-und Tupel-Auspacken
Bearbeitet Anmerkungen Rechnung zu tragen. Es ist ein Einzeiler, kein dict-comp.
Nur stützt sich auf OrderedDict unter einer wiederholenden und die macht der zip.
dict(zip(...))
.OrderedDict
Verwenden der grundlegenden:
One-liner:
Ergibt:
Ausgabe:
Nicht mit Wörterbuch Verständnis, eine Variante erweitern
dict
:Griffe sowohl oben als auch unten und wirft
ValueError
für die falschen Tasten.