根据另一个列表过滤字典项

时间:2017-08-24 22:21:15

标签: python dictionary tuples

我有一个字典,其中元组为键(my_dict),我还有一个我感兴趣的值列表(my_list)。

我想创建一个新的字典,我只保留元组的第一个元素包含在我的值列表中的情况的元组和值。有没有快速的方法来做到这一点?

例如:

my_dict = {('1', '2'): 'a', ('1', '3'): 'b', ('2', '3'): 'c', ('3', '4'): 'd', ('4', '5'): 'a', ('4', '6'): 'b', ('5', '6'): 'e', ('6', '7'): 'f'}

my_list = ['1', '2', '6']

输出应为:

my_new_dict = {('1', '2'): 'a', ('1', '3'): 'b', ('2', '3'): 'c', ('6', '7'): 'f'}

1 个答案:

答案 0 :(得分:2)

基本方法:带有过滤器的dict comp:

In [807]: {k : v for k, v in my_dict.items() if k[0] in my_list}
Out[807]: {('1', '2'): 'a', ('1', '3'): 'b', ('2', '3'): 'c', ('6', '7'): 'f'}

如果您使用的是python2,则需要my_dict.iteritems()

要提高效率,请将my_list转换为set

my_set = set(my_list)
res = {k : v for k, v in my_dict.items() if k[0] in my_set}
print(res)

过滤时查找效率会提高。