xy論python字典的pythonic

作為最常用的數(shù)據(jù)結(jié)構(gòu),但是我一直都覺(jué)得自己是個(gè)lowbi,歷史如下:

V1

實(shí)現(xiàn)一個(gè)list計(jì)數(shù)的功能,我以前經(jīng)常這么寫(xiě)

foo_dict = {}
for i in a_list:
      if i in foo_dict:
            foo_dict[i] += 1
      else:
            foo_dict[i] =1

V2

現(xiàn)在看來(lái)簡(jiǎn)直low逼了
稍微改進(jìn)一點(diǎn)的話實(shí)際上應(yīng)該這么用:
foo_dict = {}
for i in a_list:
foo_dict.set_default(i,0)
foo_dict[i] += 1
這樣代碼的復(fù)雜度就降了一個(gè)

ps

set_default可以認(rèn)為是get的反操作.
另外擴(kuò)展下:在linux shell當(dāng)中的get方法: new=$(test:-another),當(dāng)test有值的時(shí)候取前者,否則取后者.

v3

但現(xiàn)在看來(lái),明顯有更好的方法,直接調(diào)用collection的default_dict
func = lambda x: 0
d = default_dict(func)
for i in a_list:
d[i] += 1
這樣做的好處是:
"This technique is simpler and faster than an equivalent technique using dict.setdefault()
:" ---from python文檔

v4

那這樣是不是最簡(jiǎn)潔的呢,不,
C = Counter(a_list)
一步到位
為毛還要你一直造輪子呢!

Ps:當(dāng)你冥思苦想一直都找不出bug的時(shí)候,當(dāng)你覺(jué)得自己實(shí)現(xiàn)了一個(gè)功能特別牛逼的時(shí)候,一定要沉下心來(lái),默默念三遍
我就是個(gè)傻逼
我就是個(gè)傻逼
我就是個(gè)傻逼
然后,你會(huì)覺(jué)得,
你真的是個(gè)傻逼。
這個(gè)方法我已經(jīng)用了幾年了,屢試不爽……
============================我是分割線==========================================

v1

實(shí)現(xiàn)一個(gè)字典,這個(gè)字典是另外兩個(gè)字典的并集,
以前的我是肯定是先copy,然后再u(mài)pdate,
但是好像不太直觀,可讀性要差一點(diǎn)

V2

.items()加起來(lái),然后dict一下
dict(a.iteriterms()+b.iteriterms())

v3

上面的方法會(huì)在py3中報(bào)錯(cuò),
所以為什么不試試
Z = {星號(hào)x,星號(hào)y}

一步到位,而且pythonic
當(dāng)然,也可以用字典推倒式
但是我是一直不推薦用字典推倒式的,因?yàn)樾侍恍舤imeit一下

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,099評(píng)論 0 9
  • 本節(jié)要介紹的是Python里面常用的幾種數(shù)據(jù)結(jié)構(gòu)。通常情況下,聲明一個(gè)變量只保存一個(gè)值是遠(yuǎn)遠(yuǎn)不夠的,我們需要將一組...
    小黑y99閱讀 65,634評(píng)論 0 9
  • 1.安裝Package Control 從菜單 View - Show Console 或者 ctrl + ~ 快...
    七百年前閱讀 2,910評(píng)論 0 1
  • 2017年一月十五號(hào),今天是來(lái)北京的第五天。雖然只待在過(guò)海淀區(qū),但覺(jué)得北京還不錯(cuò),冬天比在湛江還舒服,更別說(shuō)湖南了...
    樹(shù)頁(yè)閱讀 155評(píng)論 0 0

友情鏈接更多精彩內(nèi)容