我一直在努力从输入字符串中删除重复的单词。我已经使用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”,所以如何获得呢?
答案 0 :(得分:3)
以您的第一方法:
data="".join(OrderedDict.fromkeys(data))
基本上将变量data
视为可迭代。在这种情况下,它将认为字符串为 iterable ,其中包含unique
个字符。因此,唯一字符将是t
,h
,e
,,
a
,n
,并且有序字典是用完全< strong> 6 键。
以您的第二种方法:
data = "".join(OrderedDict.fromkeys(data.split(" ")))
您正在将字符串 拆分到列表中(这表示可迭代)。并且列表元素为the
,an
,a
,并使用 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.
此外,尝试调试代码,调试是编程的重要组成部分,它也使人们对代码有更深入的了解。