我试图在另一个带有元组的字典中找到列表的任何排列。
例如,[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)
)。
我试图在另一个带有元组的字典中找到列表的任何排列。
例如,[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)
)。
用于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