使用元组Python从字典创建字典

2024-04-26 20:58:36 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个有N个键和一个K个键的元组的字典,K<;=N有没有一个pythonic方法可以得到一个只有K个键的字典?你知道吗

例如

orig_dict = {'key1':'value1', 'key2':'value2', ..., 'keyN':'valueN'}

tuple = ('key2', 'keyM')

newdict = myFunc(orig_dict, tuple)

print newdict

输出:

'key2':'value2', 'keyM':'valueM'

Tags: 方法lt字典pythonicdict元组key2key1
3条回答

你可以使用字典理解:

{k:v for k,v in orig_dict.iteritems() if k in tuple_keys}

观察:

>>> orig_dict = {'key1':'value1', 'key2':'value2', 'keyN':'valueN'}
>>> tuple_keys = ('key2', 'keyN')
>>> {k:v for k,v in orig_dict.iteritems() if k in tuple_keys}
{'keyN': 'valueN', 'key2': 'value2'}

只要理解一下:

tple = ('key2', 'keyM')
{k: orig_dict[k] for k in tple}

或者如果你喜欢功能性的:

from operator import itemgetter

dict(zip(tple, itemgetter(*tple)(orig_dict)))

更重要的是,pythonic是有争议的,绝对不是pythonic的是使用tuple作为变量名。你知道吗

如果某些键可能不存在,则可以使用viewkeys获得intersection

dict(zip(tuple, itemgetter(*orig_dict.viewkeys() & tple)(orig_dict)))

{k : orig_dict[k] for k in orig_dict.viewkeys() & tple}

对于python3,只需使用.keys(),它返回一个dict\u view对象,而不是python2中的列表。你知道吗

如果要为缺少的关键点提供默认值None,还可以使用mapwith听写因此缺少的键将其值设置为“无”。你知道吗

dict(zip(tuple, map(orig_dict.get, tuple)

使用词典理解

orig_dict = {'key1':'value1', 'key2':'value2', 'keyN':'valueN'}
keys = ('key2', 'keyM')

>>> {k:orig_dict[k] for k in keys if k in orig_dict}
{'key2': 'value2'}

这将比遍历字典的键并检查该键是否存在于元组中更有效,因为查找dict是O(1)操作,而在元组中搜索则是O(n)操作。你知道吗

或者,您可以使用集合来获取常用键,并将其与dict理解结合起来:

>>> {k:orig_dict[k] for k in set(keys).intersection(orig_dict)}
{'key2': 'value2'}

相关问题 更多 >