json 如何从一个列表中识别出两个子字符串,它们组成了一个唯一的子字符串,从一个更大的列表中添加到一个新的字典中?

bqf10yzr  于 2022-12-27  发布在  其他
关注(0)|答案(2)|浏览(150)

我有一个很大的唯一字符串列表(~1000),例如:[bbbbbbbh,jjjhhssa,eeeffus,...]
以及一个较小的子字符串对列表(约50个),这些子字符串对构成了以下每个唯一字符串:[bbbh,jjjh,hssa,eeef,fus,...]
我想创建一个函数,该函数以大型惟一字符串列表(~1000)作为参数,并返回一个字典,其中包含惟一字符串及其两个惟一子字符串的对应值。
例如:

result = {'bbbhbbbh': 'bbbh/bbbh', 
            'jjjhhssa': 'jjjh/hssa', 
            'eeeffus': 'eeef/fus',...}

我尝试过for循环,但是我不能打印带有重复项的唯一字符串,我想知道是否有一种更简洁的方法来处理列表解析,同时返回组成唯一字符串的两个对应值?我现在只想使用json包,不需要导入任何新包就可以解决这个问题。谢谢你的帮助。
我的电流环路和输出:

result = []    

for string in pair_list:
    matches = []
    for substring in sub_list:
        if substring in string:
            matches.append(substring)
    if matches:
        result.append(matches)

print(result)

[['bbbh'], ['jjjh', 'hssa'], ['eeef', 'fus'],...
yvgpqqbh

yvgpqqbh1#

在前面的代码中,它不会在列表项中搜索它的重复项,一旦它在主字符串中获得了所需的子字符串,它就会传递到另一个子字符串,但现在它会通过reggex finditer方法查找多个重复项。

pair_list= ['bbbhbbbh', 'jjjhhssa', 'eeeffus', 'aaaabbbh', 'ccccdddd','eeefff']

sub_list = ['bbbh', 'jjjh', 'hssa', 'eeef', 'fus']

import re
result = []    
for string in pair_list:
    matches = []
    for substring in sub_list:
        for duplicate in re.finditer(substring, string):
            matches.append(substring)
    if matches:
        result.append(matches)

print(result)

希望这能帮到你。

btqmn9zl

btqmn9zl2#

根据你的输出格式,我想你会期待一个字典类的对象。其中长字符串是关键字,所有匹配的子字符串是值。只是修改你的代码,我添加了一个dict对象来存储结果,并将子字符串附加到值。因为我们还需要获得重复的子字符串,我们可以使用计数方法和字符串。

    • 代码:**
pair_list = ["bbbhbbbh", "jjjhhssa", "eeeffus"]
sub_list = ["bbbh", "jjjh", "hssa", "eeef", "fus"]
pair_mapping_result = dict() 

for pair_string in pair_list:
    for sub_string in sub_list:
        if sub_string in pair_string:
            matched_sub_pairs = "/".join([sub_string] * pair_string.count(sub_string))
            pair_mapping_result[pair_string] = (r"{}/{}".format(pair_mapping_result[pair_string], 
                                                               matched_sub_pairs) 
                                                if pair_mapping_result.get(pair_string) else matched_sub_pairs)

print(pair_mapping_result)
    • 产出**
{'bbbhbbbh': 'bbbh/bbbh', 'jjjhhssa': 'jjjh/hssa', 'eeeffus': 'eeef/fus'}

我们可以使用dict解析来实现

    • 代码**
{pair_string: "/".join(["/".join([sub_string] * pair_string.count(sub_string)) 
                        for sub_string in sub_list \
                        if sub_string in pair_string]) \
                        for pair_string in pair_list}

相关问题