[英]Creating a dictionary from a dictionary using a tuple Python
给定一个具有N个键和K个键的元组的字典,K <= N是否有一种Python方式来获得仅包含K个键的字典?
例如
orig_dict = {'key1':'value1', 'key2':'value2', ..., 'keyN':'valueN'}
tuple = ('key2', 'keyM')
newdict = myFunc(orig_dict, tuple)
print newdict
输出:
'key2':'value2', 'keyM':'valueM'
您可以使用字典理解:
{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更值得商bat,pythonic绝对不是使用tuple作为变量名。
dict(zip(tuple, itemgetter(*orig_dict.viewkeys() & tple)(orig_dict)))
{k : orig_dict[k] for k in orig_dict.viewkeys() & tple}
对于python3
只需使用.keys()
返回dict_view对象,而不是python2中的列表。
如果要为丢失的键提供默认值None ,则还可以将map与dict.get一起使用,以便将丢失的键的值设置为None。
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'}
这将比遍历字典的键并检查键是否存在于元组中更为有效,因为查找字典和O(n)是一个O(1)操作,用于在元组中进行搜索。
或者,您可以使用一组来获取公用密钥,并将其与dict理解相结合:
>>> {k:orig_dict[k] for k in set(keys).intersection(orig_dict)}
{'key2': 'value2'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.