返回并删除其元组键包含给定元素的所有键值对

时间:2012-07-20 00:36:14

标签: python dictionary tuples

给定一个由2元素元组键入的字典,我想返回其键包含给定元素的所有键值对。

例如,字典可以是:

tupled_dict = {('a',1):1, ('a',2):0, ('b',1):1, ('c',4):0}

并且给定的元素是'a',那么应该返回的键值对将是:

('a',1):1, ('a',2):0

执行此操作的最快代码是什么?

编辑:

此外,作为一个相关的子问题,我感兴趣的是删除给定键元素的所有这些键值对的最快方法。显然,一旦我得到了上面的结果,我可以使用循环逐个删除每个字典项,但我想知道是否有一个捷径可行。

3 个答案:

答案 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))