小編寫這篇文章的主要目的,就是告訴大家一些知識(shí),告訴大家如何使用Python對數(shù)據(jù)進(jìn)行分組,另外,相關(guān)的代碼,也會(huì)給貼出來,下面就給大家詳細(xì)的解答下。
假如我們這兒有相關(guān)數(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])] """ 假如要是你的話,你應(yīng)該要怎么去寫這個(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])] """
上述代碼的書寫方式是完全沒有任何問題的,那么怎樣才能寫的更好一些,可以使用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對應(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)用的時(shí)候都會(huì)調(diào)用一個(gè)空值,所以這就會(huì)比較麻煩了。
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ì)可迭代對象中,每個(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是不符合語法規(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)] """
綜上所述,使用Python進(jìn)行分組就為大家介紹到這里了,希望可以為各位讀者帶來幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/127690.html
摘要:在中運(yùn)行不同的實(shí)驗(yàn)似乎比試圖在中進(jìn)行這種探索性的操作更有效。理論上,我們可以在中做很多的探索。我們?nèi)绾卫^續(xù)第一步是獲取格式的原始數(shù)據(jù)。這些列將包含來自使用該代理鍵的一個(gè)請求的一行數(shù)據(jù)。這是重構(gòu)的另一部分。數(shù)據(jù)的最終顯示保持完全分離。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 這里有一些技巧來處理日志文件提取。假設(shè)我們正在查看一些Enterprise Splunk提取。...
摘要:關(guān)于,新手理解起來可能比較困難,尤其是一些很牛逼的預(yù)查正則表達(dá)式。非貪婪與貪婪的問題貪婪出現(xiàn)在這種不確定數(shù)量的匹配中,所謂的貪婪,表示正則表達(dá)式在匹配的時(shí)候,盡可能多的匹配符合條件的內(nèi)容。 學(xué)習(xí)了半年的正則表達(dá)式,也不能說一直學(xué)習(xí)吧,就是和它一直在打交道,如何用正則表達(dá)式解決自己的問題,并且還要考慮如何在匹配大量的文本時(shí)去優(yōu)化它。慢慢的覺得正則已經(jīng)成為自己的一項(xiàng)技能,逐漸的從一個(gè)正則表...
摘要:關(guān)于,新手理解起來可能比較困難,尤其是一些很牛逼的預(yù)查正則表達(dá)式。非貪婪與貪婪的問題貪婪出現(xiàn)在這種不確定數(shù)量的匹配中,所謂的貪婪,表示正則表達(dá)式在匹配的時(shí)候,盡可能多的匹配符合條件的內(nèi)容。 學(xué)習(xí)了半年的正則表達(dá)式,也不能說一直學(xué)習(xí)吧,就是和它一直在打交道,如何用正則表達(dá)式解決自己的問題,并且還要考慮如何在匹配大量的文本時(shí)去優(yōu)化它。慢慢的覺得正則已經(jīng)成為自己的一項(xiàng)技能,逐漸的從一個(gè)正則表...
摘要:正則表達(dá)式是一種用來匹配字符串的強(qiáng)有力的武器。正則表達(dá)式匹配如果直接給出字符,就是精確匹配。模塊提供模塊,包含所有正則表達(dá)式的功能。分組除了簡單地判斷是否匹配之外,正則表達(dá)式還有提取子串的強(qiáng)大功能。 正則表達(dá)式是一種用來匹配字符串的強(qiáng)有力的武器。它的設(shè)計(jì)思想是用一種描述性的語言來給字符串定義一個(gè)規(guī)則,凡是符合規(guī)則的字符串,我們就認(rèn)為它匹配了,否則,該字符串就是不合法的。 showImg...
摘要:編程基礎(chǔ)要學(xué)習(xí)如何用進(jìn)行數(shù)據(jù)分析,數(shù)據(jù)分析師建議第一步是要了解一些的編程基礎(chǔ),知道的數(shù)據(jù)結(jié)構(gòu),什么是向量列表數(shù)組字典等等了解的各種函數(shù)及模塊。數(shù)據(jù)分析師認(rèn)為數(shù)據(jù)分析有的工作都在處理數(shù)據(jù)。 showImg(https://segmentfault.com/img/bVbnbZo?w=1024&h=653); 本文為CDA數(shù)據(jù)分析研究院原創(chuàng)作品,轉(zhuǎn)載需授權(quán) 1.為什么選擇Python進(jìn)行數(shù)...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02