Okay, das hat mich ein paar Mal gestört, also danke Jayesh, dass du es gefragt hast.
Die obigen Antworten scheinen eine ebenso gute Lösung zu sein wie jede andere, aber wenn Sie dies im gesamten Code verwenden, ist es sinnvoll, die Funktionalität IMHO einzuschließen. Außerdem gibt es hier zwei mögliche Anwendungsfälle: einen, bei dem es Ihnen wichtig ist, ob alle Schlüsselwörter im Originalwörterbuch enthalten sind. und eine, wo du nicht. Es wäre schön, beide gleich zu behandeln.
Für meinen Zwei-Penneth-Wert schlage ich vor, eine Unterklasse von Wörterbüchern zu schreiben, z
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 mit ein Unterwörterbuch herausziehen
orig_dict.subdict(keywords)
Anwendungsbeispiele:
#
## 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, sollte (ungefähr) die folgende Ausgabe angezeigt werden (Entschuldigung für die Formatierung):
Originalwö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 ungeradzahligen Schlüsseln:
{'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}
Die Subd2-Konstruktion schlägt fehl:
ursprüngliche Wörterbuch enthält keine Schlüssel
Wörterbuch, das mit einigen schlechten Schlüsseln erstellt wurde:
{'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
nicht enthältk