python 字典和列表巢狀用法

鋼鐵俠的知識庫發表於2021-06-28

python中字典和列表的使用,在資料處理中應該是最常用的,這兩個熟練後基本可以應付大部分場景了。不過網上的基礎教程只告訴你列表、字典是什麼,如何使用,很少做組合說明。

剛好工作中採集prometheus監控介面並做資料處理的時候,用了很多組合場景,列出幾個做一些分享。

列表(List)

序列是Python中最基本的資料結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。

列表是最常用的Python資料型別,它可以作為一個方括號內的逗號分隔值出現。

列表的資料項不需要具有相同的型別

特點就是:可重複,型別可不同

常用方式

建立一個列表,只要把逗號分隔的不同資料項使用方括號括起來即可。如下所示:

list1 = ['apple', 'banana', 2008, 2021]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]

### 向list中增加元素
list1.append(3)   ## ['apple', 'banana', 2008, 2021, 3]

### 使用extend用來連線list
list1.extend([7, 8])  ##['apple', 'banana', 2008, 2021, 3, 7, 8]

### insert 將單個元素插入到list中
list3.insert(2, 'q')   ##['a', 'b', 'q', 'c', 'd']

### 獲取列表的長度
print(len(list1))   ## 5

### 遍歷list
for name in list1:
    print(name)

extend(擴充套件)與append(追加)的看起來類似,但實際上完全不同。

  • extend接受一個引數,這個引數總是一個list,並且把這個list中每個元素新增到原list中。
  • append接受一個引數,這個引數可以是任何資料型別,並且簡單地追加到list的尾部。

字典(dictionary)

字典是另一種可變容器模型,且可儲存任意型別物件。

  • 鍵(key)必須是唯一的,可以用數字,字串或元組充當,而用列表就不行
  • 同一個鍵出現兩次,最後出現的會更新前一個的值。

常用方式

字典的每個鍵值 key=>value 對用冒號:分割,每個鍵值對之間用逗號,分割,整個字典包括在花括號 {} 中 ,格式如下所示:

>>> dict = {'a': 1, 'b': 2, 'b': '3'}
>>> print(dict)
{'a': 1, 'b': '3'}

### 訪問字典裡的值
>>> print(dict['b'])
3

### 更新和新增字典
>>> dict['a'] = 8
>>> dict['c'] = 'cc'
>>> print(dict['a'])
8
>>> print(dict['c'])
cc

### 刪除字典元素
>>> del dict['a']
>>> print(dict)
{'b': '3', 'c': 'cc'}
>>> dict.clear()      # 清空字典所有條目
>>> del dict          # 刪除字典

組合使用

列表裡也能巢狀列表,列表裡能巢狀字典
字典裡能巢狀字典,字典裡也能巢狀列表
這是非常靈活的。

列表巢狀列表

這個用得不多,相對也比較簡單,直接看例子:

### 列印輸出字元 5
l = [[1,2],[3,4],[[5,6],[7,8]]]	
>>> print(l[2][0][0])
5

### 將巢狀列表轉為非巢狀列表
>>> a = [[1,2,3],[4,5,6],[7],[8,9]]
>>> for i in a:
...     t.extend(i)
...
>>> print(t)
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8, 9]

列表巢狀字典

在列表中巢狀字典應該是最常用的方式了,直接舉例說明:

li = [{'a': 1}, {'b': 2}, {'c': 3}]

###(1) 迴圈獲取字典裡每個鍵值對:
>>> for i in range(len(li)):
...     for k, v in li[i].items():
...         print(k, v)
...
a 1
b 2
c 3
    
###(2) 獲取字典裡每個鍵值對(元組資料型別):
>>> for i in range(len(li)):
...     for j in li[i].items():
...         print(j)
...
('a', 1)
('b', 2)
('c', 3)

### 可以看到第二種獲取到的鍵值對是 元組資料型別。

字典巢狀字典

字典巢狀字典:字串作為key,字典作為value:

>>> s={'a':{0:'no',1:{'f':{0: 'no', 1: 'maybe'}}},'b':{}}  #構造字典
>>> s['a'][0]  # 取值
'no'
>>> s['a'][1]
{'f': {0: 'no', 1: 'maybe'}}
>>> s['a'][1]['f'][1]  
'maybe'
### 字典巢狀字典
dict = {
    '192.168.1.1':{'cpu':'0.23','記憶體':'16','硬碟':'500'},
    '192.168.1.2':{'cpu':'3.22','記憶體':'64','硬碟':'700'},
    '192.168.1.3':{'cpu':'1.99','記憶體':'32','硬碟':'800'},
}

### for遍歷
>>> for k,v in dict.items():
...     print('\n',k,end=': ')
...     for x,y in v.items():
...         print(x,y,end=' ')
...

 192.168.1.1: cpu 0.23 記憶體 16 硬碟 500
 192.168.1.2: cpu 3.22 記憶體 64 硬碟 700
 192.168.1.3: cpu 1.99 記憶體 32 硬碟 800

字典巢狀列表

那麼如何在字典裡巢狀列表呢?
字典巢狀列表:字串作為key,列表作為value。

### 字典巢狀列表
dict = {
    '水果':['蘋果','香蕉','橘子'],
    '動物':['獅子','老虎','大象'],
    '語言':['中文','英文','日語'],
}

### 訪問字典裡的值
>>> print(dict['水果'])
['蘋果', '香蕉', '橘子']

### 訪問列表裡的值
>>> print(dict['語言'][1])
英文

### 迴圈列印輸出看效果
>>> for k, v in dict.items():
...     print('\n', k, end=':')
...     for x in v:
...         print(x,end=' ')
...

 水果:蘋果 香蕉 橘子
 動物:獅子 老虎 大象
 語言:中文 英文 日語
 

巢狀什麼時候用

比如希望儲存年級前100名學生的各科成績時,由於學生是由成績進行排名的,列表是有序的資料型別,而字典是無序的資料型別,所以外面會用列表去儲存所有的資料。

而對於學生的各科成績來說,看重的不是有序,而是需要科目和成績一一對應,這才是最重要的。或者說當我想獲取到年紀第十名同學的語文成績,那麼可以直接去獲取到列表對應的索引,和字典裡對應的key就可以了,這樣就能得到相應的value。

至於巢狀中的排序用法,我們下一篇接著說。

---- 鋼鐵 648403020@qq.com 06.28.2021

參考文獻

列表:https://www.runoob.com/python/python-lists.html
字典:https://www.runoob.com/python/python-dictionary.html
巢狀字典:https://www.pythonf.cn/read/100118#1.2 字典巢狀列表

相關文章