D'accord, c'est quelque chose qui m'a dérangé plusieurs fois, alors merci Jayesh de me le demander.
Les réponses ci-dessus semblent être une aussi bonne solution que n'importe quelle autre, mais si vous l'utilisez partout dans votre code, il est logique d'envelopper la fonctionnalité à mon humble avis. En outre, il existe deux cas d'utilisation possibles ici: un cas où vous vous souciez de savoir si tous les mots clés se trouvent dans le dictionnaire d'origine. et un où vous ne le faites pas. Ce serait bien de traiter les deux également.
Donc, pour mes deux cents, je suggère d'écrire une sous-classe de dictionnaire, par exemple
class my_dict(dict):
def subdict(self, keywords, fragile=False):
d = {}
for k in keywords:
try:
d[k] = self[k]
except KeyError:
if fragile:
raise
return d
Vous pouvez maintenant extraire un sous-dictionnaire avec
orig_dict.subdict(keywords)
Exemples d'utilisation:
#
## our keywords are letters of the alphabet
keywords = 'abcdefghijklmnopqrstuvwxyz'
#
## our dictionary maps letters to their index
d = my_dict([(k,i) for i,k in enumerate(keywords)])
print('Original dictionary:\n%r\n\n' % (d,))
#
## constructing a sub-dictionary with good keywords
oddkeywords = keywords[::2]
subd = d.subdict(oddkeywords)
print('Dictionary from odd numbered keys:\n%r\n\n' % (subd,))
#
## constructing a sub-dictionary with mixture of good and bad keywords
somebadkeywords = keywords[1::2] + 'A'
try:
subd2 = d.subdict(somebadkeywords)
print("We shouldn't see this message")
except KeyError:
print("subd2 construction fails:")
print("\toriginal dictionary doesn't contain some keys\n\n")
#
## Trying again with fragile set to false
try:
subd3 = d.subdict(somebadkeywords, fragile=False)
print('Dictionary constructed using some bad keys:\n%r\n\n' % (subd3,))
except KeyError:
print("We shouldn't see this message")
Si vous exécutez tout le code ci-dessus, vous devriez voir (quelque chose comme) la sortie suivante (désolé pour la mise en forme):
Dictionnaire d'origine:
{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, «h»: 7, «k»: 10, «j»: 9, «m»: 12, «l»: 11, «o»: 14, «n»: 13, «q»: 16, 'p': 15, 's': 18, 'r': 17, 'u': 20, 't': 19, 'w': 22, 'v': 21, 'y': 24, 'x ': 23,' z ': 25}
Dictionnaire à partir de touches impaires:
{'a': 0, 'c': 2, 'e': 4, 'g': 6, 'i': 8, 'k': 10, 'm': 12, ' o ': 14,' q ': 16,' s ': 18,' u ': 20,' w ': 22,' y ': 24}
échec de la construction de subd2:
le dictionnaire d'origine ne contient pas de clés
Dictionnaire construit à l'aide de certaines clés incorrectes:
{'b': 1, 'd': 3, 'f': 5, 'h': 7, 'j': 9, 'l': 11, 'n': 13, 'p': 15, 'r': 17, 't': 19, 'v': 21, 'x': 23, 'z': 25}
bigdict
ne contient pask