亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用鍵開始字符訪問Python字典值

使用鍵開始字符訪問Python字典值

慕容森 2021-03-28 22:10:29
我想知道:是否可以使用不完整的鍵訪問dict值(只要給定字符串的條目不超過一個)?例如:my_dict = {'name': 'Klauss', 'age': 26, 'Date of birth': '15th july'}print my_dict['Date']>> '15th july'這可能嗎?怎么做?
查看完整描述

4 回答

?
慕雪6442864

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']


查看完整回答
反對 回復 2021-04-01
?
德瑪西亞99

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


查看完整回答
反對 回復 2021-04-01
?
子衿沉夜

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]


查看完整回答
反對 回復 2021-04-01
  • 4 回答
  • 0 關注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號