python 序列去重

需求:

我們想去除序列中出現(xiàn)的重復(fù)元素复濒,但仍然保證剩下的元素順序不變惭聂。如果想要做的只是去除重復(fù)項(xiàng),通常構(gòu)建一個(gè)集合就可以做到袱吆,但是集合不能保證元素間的順序不變厌衙,因此得到的結(jié)果會(huì)被打亂,下面展示的函數(shù)可以很好的解決:

def dedupe(items,key=None): seen =set() for item in items: val = item if key is None else key(item) if val not in seen: yield item seen.add(val)

這里的參數(shù)key的作用是指定一個(gè)函數(shù)來(lái)將序列中的元素轉(zhuǎn)換為可哈希的類(lèi)型绞绒,這么做的目的是為了檢測(cè)重復(fù)項(xiàng)婶希。它可以這樣工作:

a = [{'x':1,'y':2},{'x':1,'y':3},{'x':1,'y':2},{'x':2,'y':3}]

list(dedupe(a,key=lambda i: (i['x'],i['y'])))

Out: [{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 2, 'y': 3}]

list(dedupe(a,key=lambda i: i['x']))

這個(gè)函數(shù)可以通用,比如想讀一個(gè)文件蓬衡,去除其中重復(fù)的文本行喻杈,可以只需這樣處理:

with open(somefile,'r') as f:

    for line in dedupe(f):

以上內(nèi)容摘自《python cookbook》ff

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拐揭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奕塑,更是在濱河造成了極大的恐慌堂污,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龄砰,死亡現(xiàn)場(chǎng)離奇詭異盟猖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)换棚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)式镐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人固蚤,你說(shuō)我怎么就攤上這事娘汞。” “怎么了夕玩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵你弦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我燎孟,道長(zhǎng)禽作,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任揩页,我火速辦了婚禮旷偿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爆侣。我一直安慰自己萍程,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布兔仰。 她就那樣靜靜地躺著茫负,像睡著了一般。 火紅的嫁衣襯著肌膚如雪斋陪。 梳的紋絲不亂的頭發(fā)上朽褪,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天置吓,我揣著相機(jī)與錄音无虚,去河邊找鬼。 笑死衍锚,一個(gè)胖子當(dāng)著我的面吹牛友题,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戴质,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼度宦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼踢匣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起戈抄,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤离唬,失蹤者是張志新(化名)和其女友劉穎噪叙,沒(méi)想到半個(gè)月后缓醋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體材彪,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芯砸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年粤咪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了验烧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虐拓。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沼沈,死狀恐怖丈冬,靈堂內(nèi)的尸體忽然破棺而出嘱函,到底是詐尸還是另有隱情,我是刑警寧澤埂蕊,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布往弓,位于F島的核電站,受9級(jí)特大地震影響蓄氧,放射性物質(zhì)發(fā)生泄漏亮航。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一匀们、第九天 我趴在偏房一處隱蔽的房頂上張望缴淋。 院中可真熱鬧,春花似錦泄朴、人聲如沸重抖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钟沛。三九已至,卻和暖如春局扶,著一層夾襖步出監(jiān)牢的瞬間恨统,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工三妈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畜埋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓畴蒲,卻偏偏與公主長(zhǎng)得像悠鞍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子模燥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容