首頁 > 後端開發 > Python教學 > Python 關於字典的操作,看這個就夠了

Python 關於字典的操作,看這個就夠了

王林
發布: 2023-04-11 20:16:18
轉載
1978 人瀏覽過

字典是Python 必用且常用的資料結構,本文梳理常用的字典操作,看這個就夠了,涉及:

  • 初始化
  • 合併字典
  • 字典推導式
  • Collections 標準函式庫
  • 字典轉JSON
  • #字典轉Pandas
##初始化

1

2

3

4

5

6

7

# 最常用这种

my_object = {

"a": 5,

"b": 6

}

# 如果你不喜欢写大括号和双引号:

my_object = dict(a=5, b=6)

登入後複製

#合併字典

1

2

3

4

5

6

7

8

9

10

11

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 }

登入後複製

字典推導式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# 使用字典推导式来删除 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 中的一個內建模組,它有幾個有用的字典子類,可以大大簡化Python代碼。我經常使用的其中兩個類,defaultdict 和 Counter。此外,由於它是 dict 的子類,因此它具有標準方法,如 items()、keys()、values() 等。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

from collections import Counter

 

counter = Counter()

#counter 可以统计 list 里面元素的频率

counter.update(['a','b','a']

#此时 counter = Counter({'a': 2, 'b': 1})

 

#合并计数

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 的必殺技:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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] == {}

登入後複製

字典轉 JSON

我們通常說的 JSON 就是指 JSON 字串,它是一個字串。 Dict 可以轉成 JSON 格式的字串。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import json

 

a = dict(a=5, b=6)

 

# 字典转 JSON 字符串

json_string = json.dumps(a)

# json_string = '{"a": 5, "b": 6}'

 

# JSON 字符串转字典

assert a == json.loads(json_string)

 

# 字典转 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)

登入後複製

字典轉 Pandas

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import pandas as pd

 

# 字典转 pd.DataFrame

df = pd.DataFrame([

{ "a": 5, "b": 6 },

{ "a": 6, "b": 7 }

])

# df =

#ab

# 056

# 167

 

# DataFrame 转回字典

a = df.to_dict(orient="records")

# a = [

#{ "a": 5, "b": 6 },

#{ "a": 6, "b": 7 }

# ]

 

# 字典转 pd.Series

srs = pd.Series({ "a": 5, "b": 6 })

# srs =

# a5

# b6

# dtype: int64

 

# pd.Series 转回字典

a = srs.to_dict()

# a = {'a': 5, 'b': 6}

登入後複製

以上是Python 關於字典的操作,看這個就夠了的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板