給定一個字符串列表,我想按字母順序排序並刪除重複項。我知道我可以這樣做:如何從Python列表中刪除重複項並保持順序?
from sets import Set
[...]
myHash = Set(myList)
但我不知道如何從哈希按字母順序檢索列表成員。
我沒有結婚的散列,所以任何方式來完成此工作。此外,性能不是問題,所以我更願意將代碼中明確表達的解決方案更快速但更不透明的解決方案。
給定一個字符串列表,我想按字母順序排序並刪除重複項。我知道我可以這樣做:如何從Python列表中刪除重複項並保持順序?
from sets import Set
[...]
myHash = Set(myList)
但我不知道如何從哈希按字母順序檢索列表成員。
我沒有結婚的散列,所以任何方式來完成此工作。此外,性能不是問題,所以我更願意將代碼中明確表達的解決方案更快速但更不透明的解決方案。
如果它的清晰度你之後,而不是速度,我覺得這是很清楚的:
def sortAndUniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
output.sort()
return output
雖然它是O(n^2),但是對於輸入列表的每個元素都重複使用not in。
如果輸入已經排序,那麼有可能是做一個簡單的方法:
from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))
>,但我不知道如何從按字母順序排列的哈希檢索列表成員。
不是真的你的主要問題,但對於將來參考使用sorted
Rod的答案可用於遍歷dict
的按鍵的排序順序
for key in sorted(my_dict.keys()):
print key, my_dict[key]
...
,也因爲tuple
的由第一有序元組的成員,你可以做同樣的items
:
for key, val in sorted(my_dict.items()):
print key, val
...
對於字符串數據
output = []
def uniq(input):
if input not in output:
output.append(input)
print output
如果要保留原始列表的順序,只需使用OrderedDict和None
作爲值。
在Python2:
from collections import OrderedDict
from itertools import izip, repeat
unique_list = list(OrderedDict(izip(my_list, repeat(None))))
在Python3這是更簡單:
from collections import OrderedDict
from itertools import repeat
unique_list = list(OrderedDict(zip(my_list, repeat(None))))
如果你不喜歡的迭代器(壓縮和重複),可以使用一臺發電機(都在2 &工作3):
from collections import OrderedDict
unique_list = list(OrderedDict((element, None) for element in my_list))
另請參閱[此處](http://stackoverflow.com/q/7961363/1129682)以獲取更多信息 – user1129682 2014-03-14 17:37:49