使用键开始字符访问Python字典值

我想知道:是否可以使用不完整的键访问dict值(只要给定字符串的条目不超过一个)?例如:


my_dict = {'name': 'Klauss', 'age': 26, 'Date of birth': '15th july'}

print my_dict['Date']

>> '15th july'

这可能吗?怎么做?


慕容森
浏览 150回答 4
4回答

慕雪6442864

您不能直接使用来执行此操作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']

德玛西亚99

不是最好的解决方案,可以改进(覆盖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

子衿沉夜

当然有可能: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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python