2009-04-09 11 views
3

Ich habe eine Liste, die mehrere Tupel enthält, wie:Zugangsliste von Tupeln

[('a_key', 'a value'), ('another_key', 'another value')] 

, wo die ersten Tupel-Werte als Wörterbuch-Tasten fungieren. Ich suche jetzt eine Python-ähnliche Art und Weise der Schlüssel/Wert-Paare zugreifen zu können, wie:

"mylist.a_key" oder "mylist['a_key']"

ohne Iteration über die Liste. irgendwelche Ideen?

Antwort

14

Sie können es ohne Iteration nicht tun. Sie benötigen entweder eine Iteration, um es in ein dict zu konvertieren, und zu diesem Zeitpunkt wird der Schlüsselzugriff ohne Iteration möglich sein, oder Sie müssen für jeden Schlüsselzugriff darüber iterieren. Die Konvertierung in ein Diktat scheint die bessere Idee zu sein - auf lange Sicht ist es effizienter, aber noch wichtiger, es stellt dar, wie Sie diese Datenstruktur tatsächlich sehen - als Schlüssel- und Wertpaare.

>>> x = [('a_key', 'a value'), ('another_key', 'another value')] 
>>> y = dict(x) 
>>> y['a_key'] 
'a value' 
>>> y['another_key'] 
'another value' 
+0

perfekt, danke – schneck

3

Wenn Sie die Liste selbst sind zu erzeugen, könnten Sie in der Lage sein, es als ein Wörterbuch an der Quelle zu schaffen (die für Schlüssel, Wert-Paare erlaubt).

Ansonsten, Van Gale's Standarddict ist der Weg zu gehen, würde ich denken.

Edit:

Wie in den Kommentaren erwähnt, ist defaultdict hier nicht erforderlich, wenn Sie mit Eckfällen wie mehrere Werte mit dem gleichen Schlüssel in der Liste müssen befassen. Wenn Sie die "Liste" jedoch ursprünglich als Wörterbuch erstellen können, ersparen Sie sich später die Wiederholung.

+0

Sie würden falsch denken, da defaultdict für einen Standardwert hat, auf den zurückzugreifen ist, wenn der Schlüsselzugriff fehlschlägt. Diese Situation hat nichts mit diesem Zweck zu tun, und Sie beziehen sich darauf, ist das Einzige, was mich davon abhält, eine Aufwertung zu geben. Der erste Absatz ist absolut richtig. –

+0

Ganz richtig - obwohl defaultdict es Ihnen ermöglicht, Probleme wie mehrere Versionen desselben Schlüsselwerts zu behandeln. Ich werde in Bezug auf seine Vielseitigkeit darauf verweisen. – mavnn

+0

Ich habe Sie dann zur Klärung und Wiederholung gewählt. :) –