我正在查找如何创建一个函数,从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中的集不保证顺序.因此,使用集合可以轻松地为您提供唯一值,但它们可能采用不同的顺序,然后它们位于原始列表或字符串中(如上例所示).
希望这个对你有帮助.