色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python字典組成的數組如何進行去重?

汽車電子技術 ? 來源:Python實用寶典 ? 作者:Ckend ? 2023-02-24 13:58 ? 次閱讀

你知道嗎?如果數組是字典組成的,直接對數組內的字典采用set的方式進行去重,會報錯:

test = [{"a": 1}, {"a": 1}, {"a": 3}, {"b": 4}]
test = list(set(test))
>>>TypeError: unhashable type: 'dict'

因為使用set去重的前提是該對象為不可變對象,而字典是可變對象,因此無法直接使用該方法去重。

那么怎么解決這個問題呢?有三個辦法。

圖片

1.使用reduce方法

reduce() 函數會對參數序列中元素進行累積。

比如:

from functools import reduce
>>>def add(x, y) :            # 兩數相加
...    return x + y
...
>>>reduce(add, [1,2,3,4,5]) # 計算列表和:1+2+3+4+5
15

上述寫法也能用lambda函數簡化為:

from functools import reduce
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函數
15

因此,我們自己編寫一個函數進行數組內的字典去重:

from functools import reduce

data = [{"a": 1}, {"a": 1}, {"a": 3}, {"b": 4}]
result = []
def unduplicate(result, data):
    if data not in result:
        result = result + [data]
    return result

for i in data:
    result = unduplicate(result, i)

>>> result
>>> [{'a': 1}, {'a': 3}, {'b': 4}]

稍顯復雜,如果使用reduce函數和lambda函數,代碼能簡化很多:

def delete_duplicate(data):
    func = lambda x, y: x + [y] if y not in x else x
    data = reduce(func, [[], ] + data)
    return data

>>> delete_duplicate(data)
>>> [{'a': 1}, {'a': 3}, {'b': 4}]

當然, 我也能一行寫完這個功能:

data = reduce(lambda x, y: x + [y] if y not in x else x, [[], ] + data)

只不過有可能會被打死在工位上,所以不建議這么干。

圖片

2.奇怪的技巧

就如文章開頭提到的,字典之所以不能用set去重,是因為它是可變對象。

但是...如果我們把它變成不可變對象呢?

data = [{"a": 1}, {"a": 1}, {"a": 3}, {"b": 4}]
def delete_duplicate(data):
    immutable_dict = set([str(item) for item in data])
    data = [eval(i) for i in immutable_dict]
    return data
>>> delete_duplicate(data)
>>> [{'a': 1}, {'a': 3}, {'b': 4}]

沒錯,這能成。

圖片

1.遍歷字典,將每個子項變成字符串存放到數組中,再通過set函數去重。

2.通過eval函數,將去重后的數組里的每個子項重新轉化回字典。

如此Python,怎能不好玩?

3.高效的方式

上面講了兩種騷操作,其實都不太建議在實際工作中使用。

一個原因是真的太騷了,怕被打趴在工位上。

另一個原因是,它們在應對較大數據量的時候,性能不太行。

下面是最正統的方式:

data = [dict(t) for t in set([tuple(d.items()) for d in data])]
>>>data
>>>[{'a': 1}, {'b': 2}]

其實和第二種方式一樣,是將數組內的每個字典轉成元組,也就是不可變對象,再使用set進行去重。去重完畢后再使用dict函數將元組重新組成字典對。

但是,這種方法對于字典內還有字典的數據結構是不適用的,因此對于字典對里還有字典情況的去重,比如:

data2 = [{"a": {"b": "c"}}, {"a": {"b": "c"}}]

這種情況我建議使用第二種方式去重:

data2 = [{"a": {"b": "c"}}, {"a": {"b": "c"}}]
def delete_duplicate_str(data):
    immutable_dict = set([str(item) for item in data])
    data = [eval(i) for i in immutable_dict]
    return data
print(delete_duplicate_str(data2))

>>> [{'a': {'b': 'c'}}]

怎么樣,這三種方式你都學會了嗎?

如果覺得有收獲的話記得收藏一下。以后遇到類似的去重場景時可以拿出閱讀一下。

我們的文章到此就結束啦,如果你喜歡今天的Python 實戰教程,請持續關注Python實用寶典。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 對象
    +關注

    關注

    1

    文章

    38

    瀏覽量

    17388
  • 字典
    +關注

    關注

    0

    文章

    13

    瀏覽量

    7700
  • SET
    SET
    +關注

    關注

    0

    文章

    17

    瀏覽量

    7949
收藏 人收藏

    評論

    相關推薦

    Python元組和字典使用的基本方法

    Python學習:2、元組、字典使用的基本方法
    發表于 04-06 15:12

    python——元組,集合,字典

    python——元組,集合,字典(tuple,set,dict)
    發表于 05-22 12:30

    python字典

    python字典字典(英文名 dict),它是由一系列的鍵值(key-value)對組合而成的數據結構。字典中的每個鍵都與一個值相關聯,其中鍵,必須是可 hash 的值,如字符串,數值
    發表于 02-23 16:54

    python字典高階用法

    ()進行集合運算,items()同樣可以進行集合運算。如果現在我們要獲取兩個字典中 key,value 完全相同的部分。dic1 = {'Python': 1, 'Java': 2,
    發表于 03-29 17:39

    python合并字典的 7 種方法

    模塊,它專門用于操作可迭代對象。正好我們字典也是可迭代對象,自然就可以想到,可以使用 itertools.chain() 函數先將多個字典(可迭代對象)串聯起來,組成一個更大的可迭代對象,然后再
    發表于 04-08 15:11

    數組中的變量取值范圍如何進行糾正

    本文檔的主要內容詳細介紹的是數組中變量取值范圍如何進行糾正。
    發表于 12-17 17:08 ?4次下載

    python字典類型的使用和注意事項

    字典類型在實際的python開發中,使用特別頻繁,結合本人多年的工作經驗,現將字典的使用以及字典使用注意事項總結如下:
    的頭像 發表于 01-19 17:49 ?3526次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>字典</b>類型的使用和注意事項

    python字典是什么

    python字典 字典(英文名 dict),它是由一系列的鍵值(key-value)對組合而成的數據結構。 字典中的每個鍵都與一個值相關聯,其中 鍵,必須是可 hash 的值,如字符串
    的頭像 發表于 02-23 16:54 ?3472次閱讀

    Python-字典

    dictionary (字典) **是除列表外** Python **中,最靈活的數據類型
    的頭像 發表于 02-16 15:02 ?632次閱讀
    <b class='flag-5'>Python</b>-<b class='flag-5'>字典</b>

    Python基礎語法-字典

    字典Python中一種常見的數據類型用于存儲具有映射關系的數據。
    的頭像 發表于 02-23 14:06 ?1031次閱讀
    <b class='flag-5'>Python</b>基礎語法-<b class='flag-5'>字典</b>

    簡述python字典映射嵌套排序和判斷

    python字典是一種鍵值映射,而不是序列。 字典是通過鍵來存儲對應值。序列是通過索引位置來存儲對應值。
    的頭像 發表于 02-27 14:52 ?725次閱讀

    Python序列的字典類型介紹

    , 大括號 {} + 鍵值對 k,v 字典Python 項目中最常用的序列類型之一, 對應Java 中常用的 Json 數據類型 操作 字典的創建 通過 {} + kv 來創建 通過dict()來
    的頭像 發表于 03-08 17:35 ?1314次閱讀
    <b class='flag-5'>Python</b>序列的<b class='flag-5'>字典</b>類型介紹

    Python字典組成數組怎么進行

    你知道嗎?如果數組字典組成的,直接對數組內的字典采用set的方式進行
    的頭像 發表于 10-17 11:26 ?469次閱讀

    Python 字典組成數組怎么進行

    你知道嗎?如果數組字典組成的,直接對數組內的字典采用set的方式進行
    的頭像 發表于 11-01 10:55 ?468次閱讀

    Python列表的4種方式

    列表Python中一種常見的處理方式,任何編程場景都可能會遇到需要列表的情況。 列表
    的頭像 發表于 11-02 10:46 ?1399次閱讀
    <b class='flag-5'>Python</b>列表<b class='flag-5'>去</b><b class='flag-5'>重</b>的4種方式
    主站蜘蛛池模板: 亚洲人成网站在线观看90影院| fyeex性欧美人与曾| 欧美性FREE玩弄少妇| 国产精品视频大全| 51久久夜色精品国产| 文中字幕一区二区三区视频播放 | 女同给老师下媚药| 国产精品永久免费视频| 中国特级黄色大片| 性xxx在线观看| 日本高清色片| 看80后操| 国内精品视频久久久久免费 | 九九电影伦理片| 国产互换后人妻的疯狂VIDEO| 97精品免费视频| 亚洲综合日韩在线2019| 窝窝午夜色视频国产精品东北| 男人被绑着强行摸j| 久久精品中文闷骚内射| 国产偷国产偷亚洲高清人乐享| 超大BBWWW| 99久久婷婷国产综合精品青草| 亚洲中文字幕在线精品| 性虎成人网| 色综合 亚洲 自拍 欧洲| 欧美 亚洲 中文字幕 高清| 久久精品WWW人人爽人人| 国产香蕉视频在线观看| 国产AV无码一二三区视频| YELLOW日本动漫高清免费| 97国产精品久久精品国产| 又粗又大又爽又黄的免费视频| 亚洲精品国产高清不卡在线| 午夜国产视频| 无套日出白浆在线播放| 天天爽夜夜爽8888视频精品| 色多多污污版免费下载安装| 日本撒尿特写| 蛇缚dvd| 肉蒲团从国内封禁到日本成经典|