这个函数如何在python工作中从字符串中删除重复的字符?

Ben*_*ens 13 python

我正在查找如何创建一个函数,从python中的字符串中删除重复的字符,并在堆栈溢出时发现这个:

    from collections import OrderedDict

    def remove_duplicates (foo) :
        print " ".join(OrderedDict.fromkeys(foo))
Run Code Online (Sandbox Code Playgroud)

它有效,但如何?我搜索了OrderedDict和fromkeys的意思,但我找不到任何解释它在这种情况下如何工作的东西.

Mar*_*cin 11

我会试一试:

OrderedDict是按顺序存储密钥的字典.普通词典没有.如果你看一下文档fromkeys,你会发现:

OD.fromkeys(S [,v]) - >新的有序字典,带有来自S的键.

因此,fromkeys类方法OrderedDict在输入可迭代S(在我的示例中,字符串中的字符)中创建一个使用项作为键.在字典中,键是唯一的,因此S忽略重复的项.

例如:

s = "abbcdece" # example string with duplicate characters

print(OrderedDict.fromkeys(s))
Run Code Online (Sandbox Code Playgroud)

这导致OrderedDict:

OrderedDict([('a', None), ('b', None), ('c', None), ('d', None), ('e', None)])
Run Code Online (Sandbox Code Playgroud)

然后" ".join(some_iterable)采用iterable并在这种情况下使用空格连接其元素.它只使用键,因为字典的迭代是通过键来完成的.例如:

for k in OrderedDict.fromkeys(s): # k is a key of the OrderedDict
    print(k)
Run Code Online (Sandbox Code Playgroud)

结果是:

a
b
c
d
e
Run Code Online (Sandbox Code Playgroud)

随后,致电加入:

print(" ".join(OrderedDict.fromkeys(s)))
Run Code Online (Sandbox Code Playgroud)

将打印出来:

a b c d e
Run Code Online (Sandbox Code Playgroud)

使用set

有时候,人们会使用一套:

print( " ".join(set(s)))
# c a b d e
Run Code Online (Sandbox Code Playgroud)

但与C++中的集不同,python中的集不保证顺序.因此,使用集合可以轻松地为您提供唯一值,但它们可能采用不同的顺序,然后它们位于原始列表或字符串中(如上例所示).

希望这个对你有帮助.