比较两个列表并在python字典中获得匹配结果

2024-10-05 13:23:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,我想找到具有相同/部分字符的项目,并将结果放入字典中:

list_a= ['helloyou', 'waithere', 'byenow']

list_b =[ 'wait', 'hello', 'bye']

通缉结果:

dict_c= {'helloyou:hello', 'waithere:wait', 'byenow:bye'}

我尝试过这个,但似乎不起作用:

dict_c= {j:i for i,j in zip(list_a,list_b) if re.match(j,i)} 

编辑:

我可能有一些开头不一样的项目,例如:

list_a= ['helloyou', 'waithere', 'byenow']

list_b =[ 'yeswait', 'plushello', 'nobye']

通缉结果:

dict_c= {'helloyou:plushello', 'waithere:yeswait', 'byenow:nobye'}

编辑

如果我可以有这样一种情况,我可以使用分隔符分割项目,并使用start with

list_a = ['hid/jui/helloyou', 'hhh/hdhdh/waithere', 'jcdjcjd/bdcdbc/byenow']

list_b = ['abc/efg/waitai_lp', 'hil/mno/helloai_lj', 'pqr/byeai_ki']

需要结果

dict_c = {'hid/jui/helloyou:hil/mno/helloai_lj','hhh/hdhdh/waithere:abc/efg/waitai_lp', 'jcdjcjd/bdcdbc/byenow:pqr/byeai_ki'}


Tags: 项目编辑helloplusdictlistbyewait
3条回答
list_a= ['helloyou', 'waithere', 'byenow']

list_b =[ 'wait', 'hello', 'bye']

dict_c = {a:b for a in list_a for b in list_b if a.startswith(b)}

输出指令: {'helloyou': 'hello', 'waithere': 'wait', 'byenow': 'bye'}

试试这个-

问题是,您正在zipping2个列表中的对应项,而不是在它们之间使用cross-product。因此,在压缩版本中,只有(bye,byenow)会从re.match返回一些内容

from itertools import product

{j:i for i,j in product(list_a, list_b) if re.match(j,i)} 
{'hello': 'helloyou', 'wait': 'waithere', 'bye': 'byenow'}

可以考虑使用解释的方法{{a1},与@ Aksaye

的答案连接。
from collections import Counter
from itertools import product

def shared_chars(s1, s2):
    return sum((Counter(s1) & Counter(s2)).values())

{j:i for i,j in product(list_a, list_b) if shared_chars(j,i) > 3}

困难的部分是根据一些参数(如被检查字符串的长度)以动态方式设置常量值“3”。现在,我认为最短的单词“再见”是最小的

相关问题 更多 >

    热门问题