最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Python如何優(yōu)雅地對(duì)數(shù)據(jù)進(jìn)行分組

 更新時(shí)間:2022年07月14日 10:18:26   作者:Python技術(shù)大本營(yíng)  
這篇文章主要和大家詳細(xì)介紹一下Python是如何優(yōu)雅地對(duì)數(shù)據(jù)進(jìn)行分組的,文中通過示例進(jìn)行了詳細(xì)的講解,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

假設(shè)我們有這樣一種數(shù)據(jù):

data?=?[
????("apple",?30),?("apple",?35),
????("apple",?32),?("pear",?60),
????("pear",?32),?("pear",?60),
????("banana",?102),?("banana",?104)
]

#?我們希望變成如下格式
"""
[('apple',?[30,?35,?32]),?
?('pear',?[60,?32,?60]),?
?('banana',?[102,?104])]
"""

如果是你的話,你會(huì)怎么做呢?很容易想到的一種解決方案是構(gòu)造一個(gè)字典:

data?=?[
????("apple",?30),?("apple",?35),
????("apple",?32),?("pear",?60),
????("pear",?32),?("pear",?60),
????("banana",?102),?("banana",?104)
]

data_dict?=?{}
for?name,?count?in?data:
????if?name?not?in?data_dict:
????????data_dict[name]?=?[]
????data_dict[name].append(count)
print(data_dict)
"""
{'apple':?[30,?35,?32],?
?'pear':?[60,?32,?60],?
?'banana':?[102,?104]}
"""
print(list(data_dict.items()))
"""
[('apple',?[30,?35,?32]),?
?('pear',?[60,?32,?60]),?
?('banana',?[102,?104])]
"""

這種方案完全沒有問題,不過我們還可以寫的更優(yōu)雅一些,也就是使用字典的 setdefault 方法:

data?=?[
????("apple",?30),?("apple",?35),
????("apple",?32),?("pear",?60),
????("pear",?32),?("pear",?60),
????("banana",?102),?("banana",?104)
]

data_dict?=?{}
for?name,?count?in?data:
????#?setdefault(k,?v)?含義如下
????#?當(dāng)?k?不存在時(shí),將?k:?v?設(shè)置在字典中,并返回?v
????#?當(dāng)?k?存在時(shí),直接返回?k?對(duì)應(yīng)值
????data_dict.setdefault(name,?[]).append(count)

print(list(data_dict.items()))
"""
[('apple',?[30,?35,?32]),?
?('pear',?[60,?32,?60]),?
?('banana',?[102,?104])]
"""

setdefault 是一個(gè)非常方便的方法,但是使用頻率卻不怎么高,或者說該方法不太讓人喜歡。主要是每次調(diào)用都要給一個(gè)初始值,比如代碼中的空列表 []。另外這里的初始值可以任意,如果你希望添加的時(shí)候還能實(shí)現(xiàn)去重效果,那么就將空列表?yè)Q成空集合即可。

或者我們還可以使用 defaultdict,它位于 collections 模塊中。

from?collections?import?defaultdict

data?=?[
????("apple",?30),?("apple",?35),
????("apple",?32),?("pear",?60),
????("pear",?32),?("pear",?60),
????("banana",?102),?("banana",?104)
]

#?里面接收一個(gè)?callable
#?當(dāng)訪問的?k?不存在時(shí),返回?callable?調(diào)用之后的值
data_dict1?=?defaultdict(list)
for?name,?count?in?data:
????data_dict1[name].append(count)

print(list(data_dict1.items()))
"""
[('apple',?[30,?35,?32]),?
?('pear',?[60,?32,?60]),?
?('banana',?[102,?104])]
"""

#?也可以指定為?set
data_dict2?=?defaultdict(set)
for?name,?count?in?data:
????data_dict2[name].add(count)

print(list(data_dict2.items()))
"""
[('apple',?{32,?35,?30}),?
?('pear',?{32,?60}),?
?('banana',?{104,?102})]
"""

總的來說,defaultdict 和字典的 setdefault 方法非常類似,我們使用 setdefault 即可。

當(dāng)然啦,關(guān)于分組,還有一種特殊情況,就是詞頻統(tǒng)計(jì)。假設(shè)我們想統(tǒng)計(jì)可迭代對(duì)象中,每個(gè)元素出現(xiàn)的次數(shù)該怎么做呢?

data?=?["apple",?"apple",?"apple",
????????"pear",?"pear",?"pear",
????????"banana",?"banana"]

data_dict?=?{}
for?item?in?data:
????#?此處不能使用?setdefault,因?yàn)樗呛瘮?shù)
????#?.setdefault(item,?0)?+=?1?是不符合語(yǔ)法規(guī)則的
????if?item?not?in?data_dict:
????????data_dict[item]?=?0
????data_dict[item]?+=?1

print(data_dict)
"""
{'apple':?3,?'pear':?3,?'banana':?2}
"""

#?或者使用?defaultdict
from?collections?import?defaultdict
data_dict?=?defaultdict(int)
for?item?in?data:
????data_dict[item]?+=?1
print(data_dict)
"""
defaultdict(<class?'int'>,?
????????????{'apple':?3,?'pear':?3,?'banana':?2})
"""

然而說到詞頻統(tǒng)計(jì),我們還可以使用 collections 下的 Counter 類。

from?collections?import?Counter

data?=?["apple",?"apple",?"apple",
????????"pear",?"pear",?"pear",
????????"banana",?"banana"]

data_dict?=?Counter(data)
#?直接搞定,Counter?已經(jīng)包含了我們之前的邏輯
print(data_dict)
"""
Counter({'apple':?3,?'pear':?3,?'banana':?2})
"""
#?Counter?繼承?dict,除了支持字典操作之外
#?還提供了很多其它操作,其中一個(gè)就是?most_common
#?用于選擇出現(xiàn)頻率最高的幾個(gè)元素
print(data_dict.most_common(2))
"""
[('apple',?3),?('pear',?3)]
"""

還是很簡(jiǎn)單的。

到此這篇關(guān)于一文詳解Python如何優(yōu)雅地對(duì)數(shù)據(jù)進(jìn)行分組的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)分組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python備份文件以及mysql數(shù)據(jù)庫(kù)的腳本代碼

    python備份文件以及mysql數(shù)據(jù)庫(kù)的腳本代碼

    最近正在學(xué)習(xí)python,看了幾天了,,所以寫個(gè)小腳本練習(xí)練習(xí),沒什么含金量,只當(dāng)練手
    2013-06-06
  • pandas ix &iloc &loc的區(qū)別

    pandas ix &iloc &loc的區(qū)別

    這篇文章主要介紹了pandas ix &iloc &loc的區(qū)別,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • python實(shí)現(xiàn)A*尋路算法

    python實(shí)現(xiàn)A*尋路算法

    A*算法可以顯示尋路圖,兩點(diǎn)之間尋找最短路徑,本文使用Python實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • python每5分鐘從kafka中提取數(shù)據(jù)的例子

    python每5分鐘從kafka中提取數(shù)據(jù)的例子

    今天小編就為大家分享一篇python每5分鐘從kafka中提取數(shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python 如何操作 SQLite 數(shù)據(jù)庫(kù)

    Python 如何操作 SQLite 數(shù)據(jù)庫(kù)

    這篇文章主要介紹了Python 如何操作 SQLite 數(shù)據(jù)庫(kù),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Python實(shí)現(xiàn)為pdf添加水印功能

    Python實(shí)現(xiàn)為pdf添加水印功能

    這篇文章主要介紹了Python實(shí)現(xiàn)給普通PDF添加水印的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Python操作Word文檔7種方法的實(shí)現(xiàn)與對(duì)比(史上最全)

    Python操作Word文檔7種方法的實(shí)現(xiàn)與對(duì)比(史上最全)

    在Python中操作Word文檔是一項(xiàng)常見的任務(wù),特別是在辦公自動(dòng)化和數(shù)據(jù)處理領(lǐng)域,本文將詳細(xì)總結(jié)和對(duì)比幾種常用的Python庫(kù)和方法,有需要的可以了解下
    2025-03-03
  • Django框架 querySet功能解析

    Django框架 querySet功能解析

    這篇文章主要介紹了Django框架 querySet功能解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • TensorFlow 顯存使用機(jī)制詳解

    TensorFlow 顯存使用機(jī)制詳解

    今天小編就為大家分享一篇TensorFlow 顯存使用機(jī)制詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python密碼學(xué)RSA密碼解密教程

    python密碼學(xué)RSA密碼解密教程

    這篇文章主要為大家介紹了python密碼學(xué)RSA密碼解密教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論

峡江县| 隆化县| 宁波市| 海晏县| 读书| 大港区| 天祝| 新宁县| 桓仁| 南丰县| 桦南县| 张家港市| 申扎县| 洮南市| 永春县| 义乌市| 托里县| 涿州市| 武川县| 且末县| 隆德县| 云林县| 汪清县| 田林县| 张掖市| 温泉县| 香格里拉县| 襄樊市| 剑河县| 罗江县| 三穗县| 绥阳县| 锦屏县| 菏泽市| 绥德县| 开江县| 巧家县| 南和县| 延津县| 远安县| 铜鼓县|