Tamam, bu beni birkaç kez rahatsız eden bir şey, bu yüzden sorduğun için Jayesh'e teşekkür ederim.
Yukarıdaki cevaplar, herhangi bir kod gibi iyi bir çözüm gibi görünüyor, ancak bunu tüm kodunuzda kullanıyorsanız, IMHO işlevselliğini sarmak mantıklıdır. Ayrıca, burada iki olası kullanım durumu vardır: biri tüm anahtar kelimelerin orijinal sözlükte olup olmadığını önemsediğiniz. ve yapmadığınız bir yer. Her ikisine de eşit davranmak güzel olurdu.
Yani, iki penneth değere göre, bir sözlük alt sınıfı yazmanızı öneririm, ör.
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
Şimdi ile bir alt sözlüğü çıkarabilirsiniz
orig_dict.subdict(keywords)
Kullanım örnekleri:
#
## 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")
Yukarıdaki kodu çalıştırırsanız, aşağıdaki çıktıyı (biçimlendirme için üzgünüm) görmelisiniz (gibi bir şey):
Orijinal sözlük:
{'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}
Tek numaralı tuşlardan sözlük:
{'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 inşaatı başarısız:
orijinal sözlük bazı anahtarlar içermiyor
Bazı kötü anahtarlar kullanılarak oluşturulmuş sözlük:
{'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
içermezk