给定一个由2元素元组键入的字典,我想返回其键包含给定元素的所有键值对。
例如,字典可以是:
tupled_dict = {('a',1):1, ('a',2):0, ('b',1):1, ('c',4):0}
并且给定的元素是'a'
,那么应该返回的键值对将是:
('a',1):1, ('a',2):0
执行此操作的最快代码是什么?
编辑:
此外,作为一个相关的子问题,我感兴趣的是删除给定键元素的所有这些键值对的最快方法。显然,一旦我得到了上面的结果,我可以使用循环逐个删除每个字典项,但我想知道是否有一个捷径可行。
答案 0 :(得分:3)
获得那些:
>>> {k: v for k, v in tupled_dict.iteritems() if 'a' in k}
{('a', 1): 1, ('a', 2): 0}
同样,删除其他的:
>>> tupled_dict = {k: v for k, v in tupled_dict.iteritems() if 'a' not in k}
>>> tupled_dict
{('b', 1): 1, ('c', 4): 0}
答案 1 :(得分:2)
我没有测试它的性能,但我建议你首先使用for循环获取基线,然后使用dict comprehensions获得另一个基线。
>>> {k:v for k, v in tupled_dict.iteritems() if k[0] == 'a'}
{('a', 1): 1, ('a', 2): 0}
答案 2 :(得分:1)
即使'a'不是键元组中的第一个元素,此代码段仍然有效:
from operator import methodcaller
contains_a = methodcaller('__contains__', 'a')
keys = filter(contains_a, tupled_dict)
new_dict = dict(zip(keys, map(tupled_dict.get, keys))