我有以下Python字典:
{(a,b,c): [(1, 2, 3), (4, 5, 6)], (d,e,f):[(7,8,9)] ,(m, n, o): [(1, 2, 3), (7, 8, 9)]}
我试图找到与列表中元组元素的交集对应的键,格式如下:
对于元组(1,2,3),交集应该给出输出如下:
(a,b,c), (m,n,o)
虽然可以将列表中的每个元组元素作为字典值进行迭代,并找到相应的键,但我正在寻找一种实现这一目标的节奏式方法。
发布于 2016-11-26 08:35:41
>>> dic = {('a','b','c'): [(1, 2, 3), (4, 5, 6)], ('d','e','f'):[(7,8,9)] ,('m', 'n', 'o'): [(1, 2, 3), (7, 8, 9)]}
>>> [i for i in dic if (1,2,3) in dic[i]]
[('a', 'b', 'c'), ('m', 'n', 'o')]
>>>
如果不想迭代,可以使用filter
>>> list(filter(lambda x:(1,2,3) in dic[x],dic))
[('a', 'b', 'c'), ('m', 'n', 'o')]
如果您是一个漂亮的模块爱好者,请使用itertools.takewhile
。
>>> from itertools import takewhile
>>> list(takewhile(lambda x:(1,2,3) in dic[x],dic))
[('a', 'b', 'c'), ('m', 'n', 'o')]
最后,如果不对集合进行内部/外部迭代,上述任何操作都不会正确。这个花哨的模块是一种包装器,在引擎盖下做同样的事情。
发布于 2016-11-26 08:36:24
您原来的字典有语法错误,除非变量a、b、c等以前已经定义过。但这里有一个答案:
[key for key in d if (1,2,3) in d[key]]
发布于 2016-11-26 08:53:09
可能filter()是以下选项之一:
d = {('a','b','c'): [(1, 2, 3), (4, 5, 6)], ('d','e','f'):[(7,8,9)] ,('m', 'n', 'o'): [(1, 2, 3), (7, 8, 9)]}
def find_keys(my_dict, value):
l = lambda x: value in my_dict[x]
return list(filter(l, my_dict))
result = find_keys(d, (1, 2, 3))
https://stackoverflow.com/questions/40816448
复制相似问题