Python 關于字典的操作,看這個就夠了
↑?關注 + 星標?,每天學Python新技能
后臺回復【大禮包】送你Python自學大禮包
字典是 Python 必用且常用的數(shù)據(jù)結(jié)構(gòu),本文梳理常用的字典操作,看這個就夠了,涉及:
初始化 合并字典 字典推導式 Collections 標準庫 字典轉(zhuǎn) JSON 字典轉(zhuǎn) Pandas
初始化
#?最常用這種
my_object?=?{
??"a":?5,
??"b":?6
}
#?如果你不喜歡寫大括號和雙引號:
my_object?=?dict(a=5,?b=6)
合并字典
a?=?{?"a":?5,?"b":?5?}
b?=?{?"c":?5,?"d":?5?}
c?=?{?**a,?**b?}?#最簡單的方式
assert?c?==?{?"a":?5,?"b":?5,?"c":?5,?"d":?5?}
#?合并后還要修改,可以這樣:
c?=?{?**a,?**b,?"a":?10?}
assert?c?==?{?"a":?10,?"b":?5,?"c":?5,?"d":?5?}
b["a"]?=?10
c?=?{?**a,?**b?}
assert?c?==?{?"a":?10,?"b":?5,?"c":?5,?"d":?5?}
字典推導式
#?使用字典推導式來刪除?key
a?=?dict(a=5,?b=6,?c=7,?d=8)
remove?=?set(["c",?"d"])
a?=?{?k:?v?for?k,v?in?a.items()?if?k?not?in?remove?}
#?a?=?{?"a":?5,?"b":?6?}
#?使用字典推導式來保留?key
a?=?dict(a=5,?b=6,?c=7,?d=8)
keep?=?remove
a?=?{?k:?v?for?k,v?in?a.items()?if?k?in?keep?}
#?a?=?{?"c":?7,?"d":?8?}
#?使用字典推導式來讓所有的?value?加?1
a?=?dict(a=5,?b=6,?c=7,?d=8)
a?=?{?k:?v+1?for?k,v?in?a.items()?}
#?a?=?{?"a":?6,?"b":?7,?"c":?8,?"d":?9?}
Collections 標準庫
Collections 是 Python 中的一個內(nèi)置模塊,它有幾個有用的字典子類,可以大大簡化 Python 代碼。我經(jīng)常使用的其中兩個類,defaultdict 和 Counter。此外,由于它是 dict 的子類,因此它具有標準方法,如 items()、keys()、values() 等。
from?collections?import?Counter
counter?=?Counter()
#counter?可以統(tǒng)計?list?里面元素的頻率
counter.update(['a','b','a']
#此時?counter?=?Counter({'a':?2,?'b':?1})
#合并計數(shù)
counter.update({?"a":?10000,?"b":?1?})
#?Counter({'a':?10002,?'b':?2})
counter["b"]?+=?100
#?Counter({'a':?10002,?'b':?102})
print(counter.most_common())
#[('a',?10002),?('b',?102)]
print(counter.most_common(1)[0][0])
#?=>?a
defaultdict 也是 dict 的必殺技:
from?collections?import?defaultdict
#?如果字典的?value?是?字典
a?=?defaultdict(dict)
assert?a[5]?==?{}
a[5]["a"]?=?5
assert?a[5]?==?{?"a":?5?}
#?如果字典的?value?是列表
a?=?defaultdict(list)
assert?a[5]?==?[]
a[5].append(3)
assert?a[5]?==?[3]
#?字典的?value?的默認值可以是?lambda?表達式
a?=?defaultdict(lambda:?10)
assert?a[5]?==?10
assert?a[6]?+?1?==?11
#?字典里面又是一個字典,不用這個,你要做多少初始化操作?
a?=?defaultdict(lambda:?defaultdict(dict))
assert?a[5][5]?==?{}
字典轉(zhuǎn) JSON
我們通常說的 JSON 就是指 JSON 字符串,它是一個字符串。Dict 可以轉(zhuǎn)成 JSON 格式的字符串。
import?json
a?=?dict(a=5,?b=6)
#?字典轉(zhuǎn)?JSON?字符串
json_string?=?json.dumps(a)
#?json_string?=?'{"a":?5,?"b":?6}'
#?JSON?字符串轉(zhuǎn)字典
assert?a?==?json.loads(json_string)
#?字典轉(zhuǎn)?JSON?字符串保存在文件里
with?open("dict.json",?"w+")?as?f:
????json.dump(a,?f)
#?從?JSON?文件里恢復字典
with?open("dict.json",?"r")?as?f:
????assert?a?==?json.load(f)
字典轉(zhuǎn) Pandas
import?pandas?as?pd
#?字典轉(zhuǎn)?pd.DataFrame
df?=?pd.DataFrame([
????{?"a":?5,?"b":?6?},
????{?"a":?6,?"b":?7?}
])
#?df?=
#????a??b
#?0??5??6
#?1??6??7
#?DataFrame?轉(zhuǎn)回字典
a?=?df.to_dict(orient="records")
#?a?=?[
#????{?"a":?5,?"b":?6?},
#????{?"a":?6,?"b":?7?}
#?]
#?字典轉(zhuǎn)?pd.Series
srs?=?pd.Series({?"a":?5,?"b":?6?})
#?srs?=
#?a????5
#?b????6
#?dtype:?int64
#?pd.Series?轉(zhuǎn)回字典
a?=?srs.to_dict()
#?a?=?{'a':?5,?'b':?6}

評論
圖片
表情

