4 回答

TA貢獻1812條經驗 獲得超5個贊
您不能直接使用來執行此操作dict[keyword],您必須遍歷dict,并將每個鍵與關鍵字進行匹配,如果找到了關鍵字,則返回相應的值。這將是一項O(N)操作。
>>> my_dict = {'name': 'Klauss', 'age': 26, 'Date of birth': '15th july'}
>>> next(v for k,v in my_dict.items() if 'Date' in k)
'15th july'
要獲取所有這些值,請使用列表推導:
>>> [ v for k,v in my_dict.items() if 'Date' in k]
['15th july']
使用str.startswith,如果你只希望它的鍵與“日期”開始的值:
>>> next( v for k,v in my_dict.items() if k.startswith('Date'))
'15th july'
>>> [ v for k,v in my_dict.items() if k.startswith('Date')]
['15th july']

TA貢獻1770條經驗 獲得超3個贊
不是最好的解決方案,可以改進(覆蓋getitem)
class mydict(dict):
def __getitem__(self, value):
keys = [k for k in self.keys() if value in k]
key = keys[0] if keys else None
return self.get(key)
my_dict = mydict({'name': 'Klauss', 'age': 26, 'Date of birth': '15th july'})
print(my_dict['Date'])# returns 15th july

TA貢獻1828條經驗 獲得超3個贊
當然有可能:
print next(val for key, val in my_dict.iteritems() if key.startswith('Date'))
但這會導致對字典進行全面掃描。它只會找到第一個這樣的匹配鍵(其中“ first”是任意的)并引發,StopIteration而不是KeyError沒有鍵匹配。
為了更接近您的想法,最好將其編寫為一個函數:
def value_by_key_prefix(d, partial):
matches = [val for key, val in d.iteritems() if key.startswith(partial)]
if not matches:
raise KeyError(partial)
if len(matches) > 1:
raise ValueError('{} matches more than one key'.format(partial))
return matches[0]
添加回答
舉報