区块链技术博客
www.b2bchain.cn

字典中多个列表的子元素的交集 – python程序员分享

本文介绍了字典中多个列表的子元素的交集 – python程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我在词典中存储了许多列表。我想找到子列表的交集(即intersection of dict[i][j]) for all keys of the dictionary。)

例如,如果字典中存储的是元组,则可以使用以下代码:

set.intersection(*[index[key] for key in all_keys])  

什么是有效的方法?我尝试过的一种方法是先将每个列表列表转换为一组元组,然后再取它们的交集,但这相当笨拙。

例:

假设列表列表的字典是

dict = {}  dict['A'] = [[1, 'charlie'], [2, 'frankie']]  dict['B'] = [[1, 'charlie'], [2, 'chuck']] dict['C'] = [[2, 'chuck'], [1, 'charlie']] 

那我想回去

[1, 'charlie'] 

(也许作为一个元组,不必列出)

编辑:我只是找到一种可以的方法,但是它不是很“ pythonic”

def search(index, search_words):      rv = {tuple(t) for t in index[search_words[0]]}     for word in search_words:          rv = rv.intersection({tuple(t) for t in index[word]})     return rv  

python大神给出的解决方案

让我们将列表列表的字典称为d:

>>> d = {'A': [[1, 'charlie'], [2, 'frankie']], 'B': [[1, 'charlie'], [2, 'chuck']], 'C': [[2, 'chuck'], [1, 'charlie']]} 

我称它为d是因为dict是内置的,我们不希望覆盖它。

现在,找到交点:

>>> set.intersection( *[ set(tuple(x) for x in d[k]) for k in d ] ) set([(1, 'charlie')]) 

怎么运行的

set(tuple(x) for x in d[k])

对于键k,这将形成d[k]中元素的元组的集合。以k='A'为例:

>>> k='A'; set(tuple(x) for x in d[k]) set([(2, 'frankie'), (1, 'charlie')]) 

[ set(tuple(x) for x in d[k]) for k in d ]

这将列出上述步骤中的集合。从而:

>>> [ set(tuple(x) for x in d[k]) for k in d ] [set([(2, 'frankie'), (1, 'charlie')]),  set([(2, 'chuck'), (1, 'charlie')]),  set([(2, 'chuck'), (1, 'charlie')])] 

set.intersection( *[ set(tuple(x) for x in d[k]) for k in d ] )

这将如上所述收集三个集合的交集:

>>>set.intersection( *[ set(tuple(x) for x in d[k]) for k in d ] ) set([(1, 'charlie')]) 

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 字典中多个列表的子元素的交集 – python程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们