2013-07-06 83 views
0

我想找到另一个词典与元组内的列表的任何排列。如何在字典中查找列表的组合?

例如,在字典中找到[1,2,3]的任何组合的最佳方式是什么?格式如下:{(1,3,2):'text',(3,1,2):'text'}

符合[1,2,3]的唯一匹配项是(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,2,1),(3,1,2)

比赛将没有资格包括不包含所有项目的列表(例如:(1,2)(2)),以及包含额外的项目(例如:(1,2,3,4)(2,3,7,1))匹配。

回答

2

使用itertools.permutations()生成一个列表的所有排列:

from itertools import permutations 

if any(tuple(perm) in yourdictionary for perm in permutations(yourlist)): 
    # match found 

,但你真的要重新考虑你的数据结构。如果你做你的钥匙frozenset()对象,您只需将测试:

if frozenset(yourlist) in yourdictionary: 
    # match found 

这将是一个很多更快。

演示:

>>> from itertools import permutations 
>>> yourdictionary = {(1,3,2):'text',(3,1,2):'text'} 
>>> yourlist = [1, 2, 3] 
>>> print any(tuple(perm) in yourdictionary for perm in permutations(yourlist)) 
True 
>>> yourdictionary = {frozenset([1, 2, 3]): 'text', frozenset([4, 5, 6]): 'othertext'} 
>>> frozenset(yourlist) in yourdictionary 
True 
>>> frozenset([2, 3]) in yourdictionary 
False 
+0

呀,现在你指出来。看起来很可笑,我并不只是将格式改为有组织的格式。非常感谢。 – user2543682

相关问题