Python:字典&序列的操作

69 阅读4分钟

dict

字典dict定义是用'{}'括起来,内容是键值对,其中key是唯一的,不允许重复,存储的必须是不可变类型。

d1 = {'name':'张三',(23,4):[32]}

字典中的key就是索引

d1 = {'name':'张三',(23,4):[32]}
print(d1['name'])

输出结果:张三

例一:

d1 = {'name':'张三',(23,4):[32]}
d1['python']=100
d1['name']='李四'
print(d1)

输出结果:

image.png

由例一结果看出,当对key值进行操作的时候,对不存在的key值进行的是新建键值对的操作,对已有key值进行的是修改操作。

例2:

d1 = {'name':'张三',(23,4):[32]}
d1.update({'sex':'male'})
d1.update({'name':'kaka'})
print(d1)

输出结果:

image.png

可以看出update()函数与例一的输出结果差不多,也是对不存在的key值进行的是新建键值对的操作,对已有key值进行的是修改操作。

查看/增加

字典中的操作一般是:get()和setdefault()

get()例3:

d1 = {'name': 'kaka', (23, 4): [32], 'sex': 'male'}
print(d1.get('name'))  #print(d1['name']的结果一致

输出结果:kaka

setdefault()例4:

d1 = {'name': 'kaka', (23, 4): [32], 'sex': 'male'}
print(d1.setdefault('sex',100))
print(d1.setdefault('python',500))
print(d1.setdefault('java'))
print(d1)

输出结果:

image.png

以上是对setdefault()函数的运用,可以发现,当运用setdefault()函数的时候,如果是对存在的key值进行操作,就是查询的作用,即使是赋值也是无效的(给'sex'赋值为100,但结果依然是'male');当对不存在的key值进行操作时,返回的是定义的值('python'不存在,所以返回定义值500);当对不存在的key值进行不赋值的操作,字典d1自动添加一对键值对,key值是'java',value默认None。

注意:

dict1 = {'name':'张三','age':20,'gender':'男'}
dict1.update(masql=50)
print(dict1)

输出:

image.png

这里的update()也是新增,但是必须赋值,不然也会报错。

删除

在字典中删除的方法由pop()、popitem()、del、clear()

pop()

d1 = {'name': 'kaka', (23, 4): [32], 'sex': 'male'}
d1.pop('name')
print(d1)

输出:

image.png

popitem()→默认删除最后一对

d1 = {'name': 'kaka', (23, 4): [32], 'sex': 'male'}
d1.popitem()
print(d1)

输出:

image.png

del→不指定值,默认全删

d1 = {'name': 'kaka', (23, 4): [32], 'sex': 'male'}
del d1['name']
print(d1)

clear()→清空

d1 = {'name': 'kaka', (23, 4): [32], 'sex': 'male'}
d1.clear()
print(d1)

输出:{}

修改

索引赋值:key必须是存在的

update():key必须是存在的

d2 = {'name':'王五'}
d2.update({'name':'Lucy'})  #等于d2 ['name':'Lucy']
print(d2)

输出:{'name': 'Lucy'}

items()→查看所有键值对,keys()→查看所有key值,values()→查看所有values

dict1 = {'name':'张三','age':20,'gender':'男'}
print(dict1.items())
print(dict1.keys())
print(dict1.values())

输出:

image.png

以上情况多用于搭配for循环使用,例如:

dict1 = {'name':'张三','age':20,'gender':'男'}
dict1.items()
for k,v in dict1.items():
    print('key:{},value:{}'.format(k,v))

输出:

image.png

序列操作:

运算符支持的容器类型
+(合并)str、list、tuple
运算符支持的容器类型
*(复制)str、list、tuple
运算符支持的容器类型
in(是否存在)str、list、tuple、dict、set
运算符支持的容器类型
not in(是否不存在)str、list、tuple、dict、set
print('123'*5)

输出:123123123123123

dict1 = {'name':'张三','age':20,'gender':'男'}
print('name' in dict1)

输出:True

序列

len():计算容器中的元素个数

del或者del():删除

max():返回容器中元素最大值

min():返回容器中元素最小值

range(start,end,step):生成从start到end的数字(不包括end),步长为step,供for循环使用

enumerate():用于将一个可遍历的数据对象(如字符串、元组或者列表)组合为一个索引序列,同时列出数据和数据下表,一般用于for循环

sum():序列求和

zip():合并序列

print(max('112df334'))
print(max([234,3,23,45,2]))
print(max(['234','3','23','45']))

输出:

image.png

字母数和数字大小的比较,是遵循ASCII码表来的,不清楚的同学,可以去百度看看ASCII码表。子母中A最小,Z最大,所有小写字母都比大写字母小。

enumerate()

for i in enumerate('helloword',10):
    print(i)

输出:

image.png

enumerate()中的第二位数字10,如果不写,默认从0开始编号。

print(sum([12,345,654,87]))

输出:1098

zip()

name = ['张三','李四','王五','赵六']
age=(45,32,29,54,62)
sex=['male','male','female','male']
result=zip(name,age,sex)
for i in result:
    print(i)

输出:

image.png

注意:由以上结果看出,zip()函数只取最少元素的数量

推导式

list1 = []
for i in range(1,11):
    list1.append(i)
print(list1)

结果:

image.png

列表推导式:

list2 = [i for i in range(1,11) if i%2==0]
print(list2)

结果:

image.png

由以上列表推导式中注意:先判断for循环,在判断条件,最后再输出结果。