我有一个用英语生成单词的字典,在这个例子中,我将使用如下:
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作为值),常见的子字符串是香蕉,它们具有相同的值。
我想要做的是创建这样一本新字典:
dict2 = {'Billie Joe': 'TEST', 'Banana is red': 'ABC5', 'Cellphone': 'TEST', 'Idea': 'TEST', 'Hi there, hello world': 'TEST'}在我的示例“Hi”和相同的值:'TEST‘中,第一个字典有一些带有公共子字符串的键。我想要做的是在几个在字典中共享相同子字符串的键之间找到并保留最长的键(本质上是字符串),并创建一个只有该键的新字典。如果一个键没有其他键作为子字符串,我想直接将键值对复制到新字典中。
我希望我很清楚,有人能帮我或引导我解决这个问题吗?
提前感谢
发布于 2022-01-25 15:20:01
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遍历字典,并检查当前键是否是除其本身和值匹配之外的任何其他键的子字符串。
发布于 2022-01-25 16:24:52
另一种方法。
1.使用.copy()复制原始数据集。不要使用'=‘,因为原来的dict会改变。
2.找到匹配键,然后找到最短长度键并删除该键:value,这样,不匹配的键始终保留在输出中。
3.使用pop( key,None),这样如果键不存在,那么'None‘就会被删除,这不会破坏代码。干杯
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)https://stackoverflow.com/questions/70851085
复制相似问题