我有一个由{str:list}组成的字典。
我想要做的是找出可能存在于价值中的特定序列的密钥。
例如,字典的内容是这样的:
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个项目。
答案 0 :(得分:2)
对于字典中任何序列'seq'和更长的序列,'myseq'语句:
any(myseq[a:a+len(seq)] == seq for a in range(len(myseq)))
如果seq是myseq的子序列,将评估为True,否则为
答案 1 :(得分:0)
您可以使用此功能:
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值(整数列表)和目标列表(也是整数列表)更改为字符串,然后使用'in'判断dict值是否满足。
答案 2 :(得分:0)
注意: 我意识到,如果您的列表包含[15, 2, 36]
,其中包含字符串5, 2, 3
,则实际上会失败,因此它仅适用于特殊情况。< / em>的
既然你有一本字典,可能列出了对键和字符串匹配的理解吗?根据{{1}} ...
,它实际上与遍历元素的速度相同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]) ]