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

时间:2016-09-15 23:34:31

标签: python dictionary tuples

给出一个包含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'

3 个答案:

答案 0 :(得分:2)

您可以使用词典理解:

{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'}

答案 1 :(得分:2)

只需使用理解:

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

或者如果您更喜欢功能性:

from operator import itemgetter

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

更多 pythonic 是有争议的,绝对不是pythonic的是使用元组作为变量名。

如果某些密钥可能不存在,您可以使用intersection获取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中的列表。

如果您想为缺少的密钥提供默认值,您还可以将 map dict.get 一起使用,以便丢失密钥将它们的值设置为无。

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

答案 2 :(得分:1)

使用词典理解

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(1)操作来查找dict与O(n)以在元组中搜索。

或者你可以使用一个集来获取公共密钥并将其与字典理解相结合:

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