1

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

例如,字典可以是:

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

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

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

最快的代码是什么?

编辑:

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

4

3 回答 3

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}
于 2012-07-20T00:53:34.417 回答
2

我还没有测试它的性能,但我建议你首先使用 for 循环获取基线,然后使用dict comprehensions获取另一个基线。

>>> {k:v for k, v in tupled_dict.iteritems() if k[0] == 'a'}
{('a', 1): 1, ('a', 2): 0}
于 2012-07-20T00:48:48.610 回答
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))
于 2012-07-20T01:01:39.647 回答