L'accès Python dict valeurs avec la touche start caractères
Je me demandais: est-il possible d'accéder dict valeurs incomplète clés (tant qu'il n'y a pas plus d'une entrée pour une chaîne donnée)? Par exemple:
my_dict = {'name': 'Klauss', 'age': 26, 'Date of birth': '15th july'}
print my_dict['Date']
>> '15th july'
Est-ce possible? Comment pourrait-il être fait?
vous avez besoin de langages comme PERL ou ML pour cela, comme une fonctionnalité intégrée.
Je ne suis pas au courant d'une telle fonctionnalité en Perl.
Je ne suis pas au courant d'une telle fonctionnalité en Perl.
OriginalL'auteur Roman Rdgz | 2013-06-14
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas faire une telle directement avec
dict[keyword]
, vous avez à parcourir le dict et chaque match clé contre le mot-clé et de retourner la valeur correspondante si la clé est trouvée.Cela va être un
O(N)
opération.Pour obtenir toutes les valeurs d'utiliser une liste de compréhension:
utilisation
str.startswith
si vous voulez que les valeurs dont les touches commence par 'Date':OriginalL'auteur Ashwini Chaudhary
pas la meilleure solution, peut être améliorée (annuler getitem)
OriginalL'auteur Ali SAID OMAR
Sûr que c'est possible:
mais cela engendre un scan complet par le dictionnaire. Il ne trouve que le première tels clé correspondante (où le 'premier' est arbitraire) et soulève
StopIteration
au lieu deKeyError
si aucune des clés du match.De se rapprocher de ce que vous pensez, c'est mieux d'écrire ce qu'une fonction:
dict
avec cette fonction. Ou mieux, réimplémenté à l'aide d'un arbre au lieu d'une table de hachage.OriginalL'auteur Martijn Pieters
si j'utilise la méthode donnée ci-dessus, je suis d'exception StopIteration
OriginalL'auteur saurabh
Il y a une belle et intelligente de la mise en œuvre d'un "floues" dictionnaire pywinauto - ce pourrait être parfait pour ce dont vous avez besoin ici.
https://code.google.com/p/pywinauto/source/browse/pywinauto/fuzzydict.py
et docs ici:
http://pywinauto.googlecode.com/hg/pywinauto/docs/code/pywinauto.fuzzydict.html
(edit: bien que si vous voulez faire correspondre depuis le début de la clé, vous pourriez avoir besoin pour remplacer SequenceMatcher logique avec votre code personnalisé)
OriginalL'auteur formiaczek
Vous n'êtes pas suggérant une API cohérente:
my_dict['']
? Vous n'avez pas de one-to-one mapping.str
?Une autre raison pour laquelle vous ne pouvez pas le faire directement, même pour les chaînes et en supposant que vous avez toujours revenir une liste, c'est parce que Python
dict
est mis en œuvre à l'aide d'une table de hachage, et il aura une cartexy
etxz
à des cellules de la table.Donc, aller de l'autre sens: une telle recherche serait dire passer pour un ralentissement de la mise en œuvre de
dict
, (qui ne fait pas sens, l'optimisation pour une rare utilisation) ou lent comme un scan complet qui vous pouvez tout aussi bien écrire à la main, comme il n'est pas que commune de la valeur dédié méthode de convenance.OriginalL'auteur Elazar