Okay, das ist etwas, das mich schon ein paar Mal beschäftigt hat, also danke, Jayesh, dass du es gefragt hast.
Die Antworten oben scheinen wie eine gute Lösung als alle, aber wenn Sie diese alle über Ihren Code verwenden, macht es Sinn, die Funktionalität IMHO zu verpacken. Außerdem gibt es hier zwei mögliche Anwendungsfälle: einen, bei dem man sich darum kümmert, ob alle Schlüsselwörter im ursprünglichen Wörterbuch sind, und einen, bei dem das nicht der Fall ist. Es wäre schön, wenn man beide gleich behandeln könnte.
Daher schlage ich vor, eine Unterklasse des Wörterbuchs zu schreiben, z. B.
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
Jetzt können Sie ein Unterwörterbuch herausziehen mit
orig_dict.subdict(keywords)
Beispiele für den Gebrauch:
#
## 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")
Wenn Sie den gesamten obigen Code ausführen, sollten Sie (etwa) folgende Ausgabe sehen (entschuldigen Sie die Formatierung):
Original-Wörterbuch:
{'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}
Wörterbuch aus ungeraden Tasten:
{'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}
subd2 Konstruktion scheitert:
Das ursprüngliche Wörterbuch enthält einige Schlüssel nicht.
Das Wörterbuch wurde unter Verwendung einiger falscher Schlüssel erstellt:
{'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}