首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取字典中最长的公共子字符串,并在python中创建一个新的子字符串。

问获取字典中最长的公共子字符串,并在python中创建一个新的子字符串。
EN

Stack Overflow用户
提问于 2022-01-25 15:12:06
回答 2查看 82关注 0票数 -1

我有一个用英语生成单词的字典,在这个例子中,我将使用如下:

代码语言:javascript
复制
dict = {'Hi': 'TEST', 'Hi there': 'TEST', 'Billie Joe': 'TEST', 'Banana': 'ABC5', 'Banana is red': 'ABC5', 'Cellphone': 'TEST', 'Idea': 'TEST', 'Hi there, hello world': 'TEST'}

如果仔细观察,您会发现有些键包含具有相同值的类似字符串,例如第一个键'Hi'(将TEST作为值)、第二个键'Hi存在‘(也是测试为值)和最后一个’嗨,你好世界‘(也是测试为值)。它们都包含字符串'Hi‘和Test作为值。另一个例子是“banana”(ABC5作为值)和“banana是红色”(ABC5作为值),常见的子字符串是香蕉,它们具有相同的值。

我想要做的是创建这样一本新字典:

代码语言:javascript
复制
dict2 = {'Billie Joe': 'TEST', 'Banana is red': 'ABC5', 'Cellphone': 'TEST', 'Idea': 'TEST', 'Hi there, hello world': 'TEST'}

在我的示例“Hi”和相同的值:'TEST‘中,第一个字典有一些带有公共子字符串的键。我想要做的是在几个在字典中共享相同子字符串的键之间找到并保留最长的键(本质上是字符串),并创建一个只有该键的新字典。如果一个键没有其他键作为子字符串,我想直接将键值对复制到新字典中。

我希望我很清楚,有人能帮我或引导我解决这个问题吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-25 15:20:01

代码语言:javascript
复制
d = {'Hi': 'TEST', 'Hi there': 'TEST', 'Billie Joe': 'TEST', 'Banana': 'ABC5', 'Banana is red': 'ABC5', 'Cellphone': 'TEST', 'Idea': 'TEST', 'Hi there, hello world': 'TEST'}

new_d = {}
for key, value in d.items():

    is_substring = False
    for check in d.keys():
        if key != check and key in check and d[key] == d[check]:
            is_substring = True

    if not is_substring:
        new_d[key] = value

遍历字典,并检查当前键是否是除其本身和值匹配之外的任何其他键的子字符串。

票数 1
EN

Stack Overflow用户

发布于 2022-01-25 16:24:52

另一种方法。

1.使用.copy()复制原始数据集。不要使用'=‘,因为原来的dict会改变。

2.找到匹配键,然后找到最短长度键并删除该键:value,这样,不匹配的键始终保留在输出中。

3.使用pop( key,None),这样如果键不存在,那么'None‘就会被删除,这不会破坏代码。干杯

代码语言:javascript
复制
dict = {'Hi': 'TEST', 'Hi there': 'TEST', 'Billie Joe': 'TEST', 'Banana': 'ABC5', 'Banana is red': 'ABC5', 'Cellphone': 'TEST', 'Idea': 'TEST', 'Hi there, hello world': 'TEST'}
output = dict.copy()

for key1,value in dict.items():
    for key2 in dict.keys():
        if key1 in key2:
            if len(key2) > len(key1):
                output.pop(key1,None)
                key1 = key2
            
print(output)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70851085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档