2009-04-09 8 views
3

J'ai une liste qui contient plusieurs tuples, comme:Liste d'accès des tuples

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

où les premières valeurs-uplet agissent comme clés du dictionnaire. Je cherche maintenant un moyen comme python pour accéder à la clé/valeur paires, comme:

"mylist.a_key" ou "mylist['a_key']"

sans itérer sur la liste. des idées?

Répondre

14

Vous ne pouvez pas le faire sans aucune itération. Vous aurez besoin de l'itération pour la convertir en dict, à quel point l'accès à la clé deviendra possible sans itération, ou vous aurez besoin de parcourir pour chaque accès à la clé. La conversion en dict semble être la meilleure idée - à long terme, elle est plus efficace, mais plus important encore, elle représente la façon dont vous voyez réellement cette structure de données - en tant que paires de clés et de valeurs.

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

parfait, merci – schneck

3

Si vous générez la liste vous-même, vous pourriez être en mesure de le créer comme un dictionnaire à la source (qui permet de clés, des paires de valeurs).

Sinon, le defaultdict de Van Gale est la voie à suivre je pense.

Edit:

Comme mentionné dans les commentaires, defaultdict n'est pas nécessaire ici à moins que vous devez traiter les cas d'angle comme plusieurs valeurs avec la même clé dans votre liste. Cependant, si vous pouvez générer la "liste" à l'origine en tant que dictionnaire, vous éviterez d'avoir à recommencer par la suite.

+0

Vous auriez tort, puisque defaultdict est pour avoir une valeur par défaut pour revenir à quand l'accès à la clé échoue. Cette situation n'a rien à voir avec ce but, et le fait de vous y référer est la seule chose qui m'empêche de donner un sursaut. Le premier paragraphe est absolument correct. –

+0

Assez vrai - bien que defaultdict vous permette de gérer des problèmes tels que plusieurs versions de la même valeur de clé. Je pars dans une référence à cela pour sa polyvalence. – mavnn

+0

J'ai donc voté pour la clarification et la réitération. :) –

Questions connexes