Được rồi, đây là điều đã làm phiền tôi vài lần, vì vậy cảm ơn bạn Jayesh đã hỏi nó.
Các câu trả lời ở trên có vẻ như là một giải pháp tốt như bất kỳ, nhưng nếu bạn đang sử dụng điều này trên toàn bộ mã của mình, sẽ rất hợp lý khi bọc chức năng IMHO. Ngoài ra, có hai trường hợp sử dụng có thể có ở đây: một trường hợp bạn quan tâm liệu tất cả các từ khóa có trong từ điển gốc hay không. và một nơi bạn không. Nó sẽ là tốt đẹp để đối xử cả hai như nhau.
Vì vậy, với giá trị hai xu của tôi, tôi khuyên bạn nên viết một lớp từ điển phụ, vd
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
Bây giờ bạn có thể lấy ra một từ điển phụ với
orig_dict.subdict(keywords)
Ví dụ sử dụng:
#
## 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")
Nếu bạn chạy tất cả các mã trên, bạn sẽ thấy (một cái gì đó giống như) đầu ra sau (xin lỗi vì định dạng):
Từ điển gốc:
{'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}
Từ điển từ các khóa được đánh số lẻ:
{'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}
xây dựng sub2 không thành công:
từ điển gốc không chứa một số khóa
Từ điển được xây dựng bằng một số khóa xấu:
{'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
không chứak