python中字典和列表的使用,在数据处理中应该是最常用的,这两个熟练后基本可以应付大部分场景了。不过网上的基础教程只告诉你列表、字典是什么,如何使用,很少做组合说明。
刚好工作中采集prometheus监控接口并做数据处理的时候,用了很多组合场景,列出几个做一些分享。
列表(List)
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
特点就是:可重复,类型可不同
常用方式
创建一个列表,只要把逗号分隔的不同数据项使用方括号括起来即可。如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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
对用冒号:
分割,每个键值对之间用逗号,
分割,整个字典包括在花括号 {}
中 ,格式如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
>>> 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 # 删除字典
|
组合使用
列表里也能嵌套列表,列表里能嵌套字典
字典里能嵌套字典,字典里也能嵌套列表
这是非常灵活的。
列表嵌套列表
这个用得不多,相对也比较简单,直接看例子:
1
2
3
4
5
6
7
8
9
10
11
12
|
### 打印输出字符 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 ]
|
列表嵌套字典
在列表中嵌套字典应该是最常用的方式了,直接举例说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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:
1
2
3
4
5
6
7
|
>>> 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'
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
### 字典嵌套字典
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。
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
|
### 字典嵌套列表
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。
至于嵌套中的排序用法
参考文献
列表:https://www.runoob.com/python/python-lists.html
字典:https://www.runoob.com/python/python-dictionary.html
嵌套字典:https://www.pythonf.cn/read/100118#1.2字典嵌套列表
到此这篇关于python 字典和列表嵌套用法的文章就介绍到这了,更多相关python 字典和列表嵌套内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/jiba/archive/2021/06/28/14945833.html