如何测试python列表中序列的成员身份?

如何测试python列表中序列的成员身份?,python,list,membership,Python,List,Membership,我有一本由{str:list}组成的字典 我想做的是找出可能存在于值中的具有特定sequence的键 例如,字典的内容如下: DOC3187 [1, 2, 3, 6, 7] DOC4552 [5, 2, 3, 6] DOC4974 [1, 2, 3, 6] DOC8365 [1, 2, 3, 5, 6, 7] DOC3738 [1, 4, 2, 3, 6] DOC5311 [1, 5, 2, 3, 6, 7] 我需要找出序列为[5,2,3]的键,所以期望的返回应该是: DOC4552, DOC

我有一本由{str:list}组成的字典

我想做的是找出可能存在于值中的具有特定sequence的键

例如,字典的内容如下:

DOC3187 [1, 2, 3, 6, 7]
DOC4552 [5, 2, 3, 6]
DOC4974 [1, 2, 3, 6]
DOC8365 [1, 2, 3, 5, 6, 7]
DOC3738 [1, 4, 2, 3, 6]
DOC5311 [1, 5, 2, 3, 6, 7]
我需要找出序列为[5,2,3]的键,所以期望的返回应该是:

DOC4552, DOC5311

我使用的是Python 3.3.2,字典大约有400个条目。

对于字典中的任何序列“seq”和更长的序列,“myseq”语句:

any(myseq[a:a+len(seq)] == seq for a in range(len(myseq)))

如果seq是myseq的子序列,则将计算为True,否则为False。您可以使用此函数:

def find_key_in_dict(d, t):
    """ d is dict for searching, t is target list.
    -> return matching key list.
    """
    b_str = reduce(lambda x, y: str(x) + str(y), t)
    return map(lambda x: x[0], filter(lambda i: b_str in reduce(lambda x, y: str(x) + str(y), i[1]), d.items()))
要搜索该值,可以使用reduce()函数将dict值(整数列表)和目标列表(也是整数列表)更改为string,然后使用“in”判断dict值是否符合要求。

注意:我意识到,如果列表中包含
[15,2,36]
而其中确实包含字符串
5,2,3
因此它仅适用于特殊情况

既然你有一本字典,也许可以列出对键和字符串匹配的理解?根据
timeit
,它实际上与穿过元素的速度相同

s_list = [5,2,3]   # sequence to search for

# Setting up your dictionary
MyD = {'DOC3187' : [1, 2, 3, 6, 7],
    'DOC4552' : [5, 2, 3, 6],
    'DOC4974' : [1, 2, 3, 6],
    'DOC8365' : [1, 2, 3, 5, 6, 7],
    'DOC3738' : [1, 4, 2, 3, 6],
    'DOC5311' : [1, 5, 2, 3, 6, 7]}

query = str(s_list)[1:-1]  # make a string of '5, 2, 3'    
Matches = [ k for k in MyD if query in str(MyD[k]) ]
结果:

['DOC5311', 'DOC4552']

另外,请出示实际的字典,而不仅仅是contents@thefourtheye:我经常鼓励用户,尤其是那些刚刚接触堆栈溢出的用户,复制并粘贴实际代码和/或实际的交互会话,以确保我们获得准确的图片。OP在这里肯定没有这样做。但他或她已经准确地说明了字典里的内容。键是字符串,值是列表。如果不是内容,你所说的“实际词典”是什么意思?您是否需要将其视为
{'DOC3187':[1,2,3,6,7],'DOC4552':[5,2,3,6],
等?@JohnY虽然没有必要,但由于信息足够,最好是复制粘贴词典以检查答案。