从python中的字符串中删除重复的单词

时间:2019-07-01 09:34:32

标签: python python-3.x

我一直在努力从输入字符串中删除重复的单词。我已经使用OrderedDict来这样做。我尝试使用两种几乎相同的不同方法来实现上述目的,但是程序的输出却不同。谁能解释为什么会这样?

代码1:

    from collections import OrderedDict
    data = "the an a the"
    data="".join(OrderedDict.fromkeys(data))
     print(data)

代码2:

    from collections import OrderedDict   
    data = "the an a the"
    data = "".join(OrderedDict.fromkeys(data.split(" ")))   
    print(data)

代码1的输出:“ an” 代码2的输出:“ theana” 我想知道为什么会导致这种差异,而且我希望得到的结果是“ the a a”,所以如何获得呢?

3 个答案:

答案 0 :(得分:3)

以您的第一方法:

data="".join(OrderedDict.fromkeys(data))

基本上将变量data视为可迭代。在这种情况下,它将认为字符串 iterable ,其中包含unique个字符。因此,唯一字符将是thean,并且有序字典是用完全< strong> 6 键。


以您的第二种方法:

data = "".join(OrderedDict.fromkeys(data.split(" ")))

您正在将字符串 拆分到列表中(这表示可迭代)。并且列表元素为theana,并使用 3 个唯一值作为键来创建有序字典。

最后一步是将它们加入,这意味着仅键将作为字符串返回。

希望这会有所帮助。

答案 1 :(得分:0)

string1 = "the an a the"
words = string1.split()
print (" ".join(sorted(set(words), key=words.index)))

答案 2 :(得分:0)

OrderedDict.fromkeys(data) 将根据字符串“ data”中的每个单个字符创建字典。 结果:

{
    '**t**': None,
    '**h**': None,
    '**e**': None,
    ...
}

而:

OrderedDict.fromkeys(data.split(" ")) 将创建一个新字典,其中字符串中的每个单词(或更准确地说,所有内容均按空格分隔)作为新字典的键。

结果:

{
    '**the**': None,
    '**an**': None,
    ...
}

并且由于要用空格分隔结果,因此应在数据后面加上空格,

" ".join(OrderedDict.fromkeys(data.split(" ")))
 ^ #Notice this space here.

此外,尝试调试代码,调试是编程的重要组成部分,它也使人们对代码有更深入的了解。