Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在元组列表中删除类似的单词_Python_String_List_Tuples - Fatal编程技术网

Python 在元组列表中删除类似的单词

Python 在元组列表中删除类似的单词,python,string,list,tuples,Python,String,List,Tuples,我有一个这样的元组列表(短语,分数):[('center',1),('carcenter',2),('rental car',1.5),('car center',2),('rental car center',3),('weather',4),…] 我想按规则删除重复的短语: 如果一个短语包含的单词全部出现在另一个短语中,则删除得分最低的一个短语。 例如,“汽车中心”=集合(汽车,中心)是“出租汽车中心”=集合(出租,汽车,中心)的子集 如果两个集合只相交,而不是另一个集合的子集,我不会删除其

我有一个这样的元组列表(短语,分数):[('center',1),('carcenter',2),('rental car',1.5),('car center',2),('rental car center',3),('weather',4),…]

我想按规则删除重复的短语:

如果一个短语包含的单词全部出现在另一个短语中,则删除得分最低的一个短语。 例如,“汽车中心”=集合(汽车,中心)是“出租汽车中心”=集合(出租,汽车,中心)的子集 如果两个集合只相交,而不是另一个集合的子集,我不会删除其中任何一个

除了运行嵌套for循环并在循环过程中弹出项之外,我想不出更好的方法了。我也考虑使用集合和交集,但是我需要比较所有的两个组合,有什么方法我不会错过任何一对组合并有效地做到这一点?
输出是短语得分元组的列表,因此人们不会找到包含两个短语且其中一个是另一个的子集的对

沿着这些路线:

a=[('center', 1), ('car center', 2), ('rental car', 1.5), ('car center', 2), ('rental car center', 3), ('weather', 4)]

d = {}
keys_to_remove =set()
for i in a:
    keys = d.keys()

    for key in list(d.keys()):
        if (i[0] in key):
            d[key] = max(i[1],d.get(key))
        elif key in i[0]:
            d[i[0]]=max(i[1],d.get(key))
            keys_to_remove.add(key)
        else:
            d[i[0]]=i[1]

    else:
        d[i[0]]=i[1]
{k:v for k,v in d.items() if k not in keys_to_remove}

您对该示例的预期输出是什么?你是不是把另一个单词中包含的最低的单词都去掉了?现在,把这个想法扩展到三个单词和四个单词的短语。在“拉瓜迪亚国际机场租车中心”找到“机场租车中心”你会怎么看?您要求的是一个开放式的算法和设计,对于堆栈溢出问题来说,它太宽泛了。重新开始介绍之旅。当您准备好询问特定的编程问题时,请发布您的,我们将提供帮助。@Prune“机场租车中心”和“拉瓜迪亚国际机场租车中心”仅在“租车中心”相交,但它们不是彼此的子集,因此我不会删除其中任何一个。@rasaar输出将是一个元组列表(短语,分数),但不会存在一对有两个短语的组合,其中一个是另一个的子集。你的帖子说“如果一个短语包含的单词都出现在另一个短语中“。我发布的案例有这个属性。如果这不是你想要的,如果它包含了整个短语,那么请更新你的问题以反映它…你应该能够开发出一个简单的问题解决方案。”。