繁体   English   中英

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

[英]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作为变量名。

如果某些键可能不存在,则可以与viewkeys 相交

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 ,则还可以将mapdict.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM