首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python字典中查找对应字典值中元素的交集键

在python字典中查找对应字典值中元素的交集键
EN

Stack Overflow用户
提问于 2016-11-26 08:28:29
回答 4查看 340关注 0票数 1

我有以下Python字典:

代码语言:javascript
运行
复制
{(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),交集应该给出输出如下:

代码语言:javascript
运行
复制
(a,b,c), (m,n,o)

虽然可以将列表中的每个元组元素作为字典值进行迭代,并找到相应的键,但我正在寻找一种实现这一目标的节奏式方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-26 08:35:41

代码语言:javascript
运行
复制
>>> 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

代码语言:javascript
运行
复制
>>> list(filter(lambda x:(1,2,3) in dic[x],dic))
[('a', 'b', 'c'), ('m', 'n', 'o')]

如果您是一个漂亮的模块爱好者,请使用itertools.takewhile

代码语言:javascript
运行
复制
>>> from itertools import takewhile
>>> list(takewhile(lambda x:(1,2,3) in dic[x],dic))
[('a', 'b', 'c'), ('m', 'n', 'o')]

最后,如果不对集合进行内部/外部迭代,上述任何操作都不会正确。这个花哨的模块是一种包装器,在引擎盖下做同样的事情。

票数 2
EN

Stack Overflow用户

发布于 2016-11-26 08:36:24

您原来的字典有语法错误,除非变量a、b、c等以前已经定义过。但这里有一个答案:

代码语言:javascript
运行
复制
[key for key in d if (1,2,3) in d[key]]
票数 0
EN

Stack Overflow用户

发布于 2016-11-26 08:53:09

可能filter()是以下选项之一:

代码语言:javascript
运行
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40816448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档