第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除Python列表中的重復(fù)DECT

刪除Python列表中的重復(fù)DECT

森林海 2019-08-03 07:03:54
刪除Python列表中的重復(fù)DECT我有一個字典列表,我想用相同的鍵和值對刪除這些數(shù)據(jù)集。關(guān)于這份清單:[{'a': 123}, {'b': 123}, {'a': 123}]我想退貨:[{'a': 123}, {'b': 123}]另一個例子:關(guān)于這份清單:[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}, {'a': 123, 'b': 1234}]我想退貨:[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]
查看完整描述

3 回答

?
狐的傳說

TA貢獻1804條經(jīng)驗 獲得超3個贊

試試這個:

[dict(t) for t in {tuple(d.items()) for d in l}]

策略是將字典列表轉(zhuǎn)換為元組列表,其中元組包含字典的項。由于元組可以被散列,所以可以使用set(使用集合理解在這里,更老的python替代方案應(yīng)該是set(tuple(d.items()) for d in l)),在此之后,從元組重新創(chuàng)建字典。dict.

其中:

  • l

    是原始列表
  • d

    是列表中的字典之一。
  • t

    是從字典中創(chuàng)建的元組之一。

編輯:如果您想保留順序,上面的一行將無法工作,因為set不會那么做的。但是,使用幾行代碼,您也可以這樣做:

l = [{'a': 123, 'b': 1234},
        {'a': 3222, 'b': 1234},
        {'a': 123, 'b': 1234}]seen = set()new_l = []for d in l:
    t = tuple(d.items())
    if t not in seen:
        seen.add(t)
        new_l.append(d)print new_l

示例輸出:

[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]

注意:可能會出現(xiàn)兩個鍵和值相同的字典,不會產(chǎn)生相同的元組。如果它們經(jīng)歷不同的添加/刪除鍵歷史記錄,則可能發(fā)生這種情況。如果您的問題是這樣的,那么考慮排序d.items()正如他所建議的。




查看完整回答
反對 回復(fù) 2019-08-04
?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

另一條-基于清單理解的班輪:

>>> d = [{'a': 123}, {'b': 123}, {'a': 123}]>>> [i for n, i in enumerate(d) if i not in d[n + 1:]][{'b': 123}, {'a': 123}]

既然我們可以用dict比較而言,我們只保留未在初始列表的其余部分中的元素(此概念僅可通過索引訪問)。n,因此使用了enumerate).


查看完整回答
反對 回復(fù) 2019-08-04
?
慕的地10843

TA貢獻1785條經(jīng)驗 獲得超8個贊


有時舊的循環(huán)仍然很有用。這段代碼略長于jcorado的代碼,但很容易讀懂:

a = [{'a': 123}, {'b': 123}, {'a': 123}]b = []for i in range(0, len(a)):
    if a[i] not in a[i+1:]:
        b.append(a[i])


查看完整回答
反對 回復(fù) 2019-08-04
  • 3 回答
  • 0 關(guān)注
  • 465 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號