我有一个可以用 'K' 制作的所有序列组合的列表 和 'M' 长度从 6 到 18。所以,我有组合 包括 "KKKKKK" 到 "MMMMMMMMMMMMMMMMMM"。 我还有一本字典,其中的键是 id,值是 不仅用 K 和 M 制作的长序列,还用其他一些制作 对我来说不重要的字符。
小例子:
com = ["KKKKKK", "KKKKKM", ......, "MMMMMMMMMMMMMMMMMM"]
li = {id1: "KKKKKKHKJASGKKKMOOGBMMMMMMMMMMMMMMMMMM",
id2:"MMKFJDFKFGKJJJJFKKKKKMJKJHFKKKKKK"}
我想在 li 字典中找到不同的组合(值)和 创建一个新字典,其中的键是 li 字典中的 id (键)和值是包含在中找到的组合的列表 li字典的值。对于小例子,输出将是 像这样:
results = {id1: ["KKKKKK", "MMMMMMMMMMMMMMMMMM"], id2: ["KKKKKM", "KKKKKK"] }
我写了下面的代码,但没有给我想要的。
results = {}
for i in com:
if i in li.values():
results[li.keys()] = [i]
请您参考如下方法:
您可以使用 re.findall()在字典理解中:
In [11]: {k: re.findall(r'(?:K|M){6,18}', v) for k, v in li.items()}
Out[11]: {'id1': ['KKKKKK', 'MMMMMMMMMMMMMMM'], 'id2': ['KKKKKM', 'KKKKKK']}
r'(?:K|M){6,18}'是一个正则表达式,将匹配 K 的任何子字符串或 M长度为 6 到 18。
