python字典相关操作和方法详解

一、字典基础

1.什么是字典(dict)

{键1:值1,键2:值2,键3:值3,…}
字典是器型数据类型,将{}作为容器的标志,多个元素用逗号隔开。字典是 可变的(支持增删改) ;字典是 无序的(不支持下标操作) ;字典在保存数据的时候, 真正想要保存的是值 ,键是用来对值进行区分的。
字典中的元素:键值对(key:value)
键 - 不可变(可以是数字,字符串,元组),一般是字符串;必须唯一
值 - 任何类型的数据,可以重复

dict1 = {} # 空字典,可变,有价值
dict2 = {1:23,'abc':'hello',(1,2):100}
# dict3 = {[1,2,3]:12, 34:'we'} # 报错
print(dict1,dict2) # {} {1: 23, 'abc': 'hello', (1, 2): 100}

2.什么时候用字典

a.需要同时保存多个数据
b.多个数据的意义不同(需要做区分)

3.获取字典的值

1)获取单个元素对应的值

可以根据不同场合选择以下哪种用法

a.字典[key]

获取字典中指定key对应的值,如果key不存在会报错

dog = {'name':'旺财','age':3,'breed':'二哈','gender':'母','weight':40}
print(dog['name']) # 旺财
# print(dog['height']) # 报错
b.字典.get(key)

获取字典中指定key对应的值,如果key不存在不会报错,返回None

  字典.get(dog.get(key,默认值))

获取字典中指定的key对应的值,如果key不存在,返回默认值

print(dog.get('name')) # 旺财
print(dog.get('height')) # None
print(dog.get('height',40)) # 40

2)遍历

a.需要掌握和使用的遍历方法(效率最高)

   for 变量 in 字典:
          循环体
注意:变量取到的是字典中所有的key

dog = {'name':'旺财','age':3,'breed':'二哈','gender':'母','weight':40}
for x in dog:
    print(dog[x])
b.其他两种情况(能避免使用尽量避免)

   for 变量 in 字典.values():
          循环体
注意:变量取到的是字典所有的值,会先遍历字典取值放进容器,再遍历容器取值,效率更低

dog = {'name':'旺财','age':3,'breed':'二哈','gender':'母','weight':40}
for x in dog.values():
    print(x)

   for 变量1,变量2 in 字典.items():
          循环体
注意:变量1能取到字典所有key,变量2能取到字典所有的值,字典.items()会把字典变成一个列表,字典里的键值对编程元组存储进列表,非常消耗资源,效率最低

dog = {'name':'旺财','age':3,'breed':'二哈','gender':'母','weight':40}
for x, y in dog.items():
    print(x, y)
# 练习1:声明一个变量同时保存4个学生的信息(姓名、年龄、电话、成绩)
inform = [
    {'name':'张三','age':23,'tell':'12312313','score':89},
    {'name':'李四','age':16,'tell':'890890890','score':66},
    {'name':'王五','age':19,'tell':'456464','score':77},
    {'name':'赵六','age':22,'tell':'1567567','score':88}
]
print(inform)
# 练习2:统计上面4个学生中未成年的个数
count = 0
for i in inform:
    if i.get('age') < 18:
        count += 1
print('未成年个数:',count)

二、字典元素的增删改

1.添加 / 修改 键值对

语法1:字典[key] = 值
如果key存在,就将key对应的值修改成指定的值(改)
如果key不存在,以’key:value’的形式添加一个键值对(增)

movie = {'name':'西游记','time':'1978-10-23','director':'吴承恩'}
print(movie)
movie['time'] = '1983-10-25' # 修改
print(movie)
movie['score'] = 9.8 # 增加
print(movie)

语法2:字典.setdefault(键,值)
只是添加键值对,不存在修改功能

movie = {'name':'西游记','time':'1978-10-23','director':'吴承恩'}
movie.setdefault('type', '神话')
print(movie)

2.删除键值对

1)del 字典[key]

删除指定key对应的键值对,如果key不存在会报错

扫描二维码关注公众号,回复: 11332397 查看本文章
del movie['director']
print(movie)

2)字典.pop(key)

取出字典中指定key对应的值,并且返回对应的值,取出之后字典就没有了

type1 = movie.pop('type')
print(movie,type1)

三、字典的相关操作和方法

1.字典相关操作

字典不支持加法和减法运算

1)比较运算

字典只支持比较相等,不支持比较大小

print({'a':1,'b':2} == {'b':2,'a':1}) # True

2)in 和 not in

数据 in 字典 - 判断字典中是否存在指定的 key
数据 not in 字典 - 判断字典中是否不存在指定的 key

cat = {'name':'花花','age':2,'color':'白色'}
print('name' in cat) # True
print('花花' in cat) # false

3)相关函数

a.len(字典) - -统计字典中键值对的个数

print(len(cat)) # 3

b.dict(数据) - 将指定的数据转换成字典
数据要求:
    1.数据是容器型数据类型
    2.数据中的元素是有且只有两个元素的容器(小容器)
    3.小容器中的第一个元素是不可变的

x = [(1, 2), (3, 4), (5, 6)]
dict1 = dict(x)
print(dict1)   # {1: 2, 3: 4, 5: 6}
x = ('ab', 'cd', 'ef')
dict1 = dict(x)
print(dict1)   # {'a': 'b', 'c': 'd', 'e': 'f'}

c.字典转换成其他数据类型
bool(字典) - 空字典会转换成False,其他都是True
list(字典) - 将字典所有的key作为列表的元素
tuple(字典) - 将字典所有的key作为元组的元素

cat = {'name':'花花','age':2,'color':'白色'}
print(list(cat)) # ['name', 'age', 'color']

2.相关方法

1)字典.clear - 清空字典
2)字典.copy() - 复制字典产生一个新的字典并且返回
3)dict.fromkeys(序列) - 创建一个新的字典,字典的key是序列中的元素,值是None
      dict.fromkeys(序列,值) - 创建一个新的字典,字典的key是序列中的元素,值是指定的值

dict2 = dict.fromkeys('abc')
print(dict2) # {'a': None, 'b': None, 'c': None}

4)items,keys,values
      字典.keys() - 获取字典所有的key,返回一个容器,这个容器不是列表,但可以转换
      字典.values() - 获取字典所有的值,返回一个容器,这个容器不是列表,但可以转换
      字典.items() - 获取字典所有的key和value,容器中的元素是元组,每个元组对应一个键值对,这个容器不是列表

cat = {'name':'花花','age':2,'color':'白色'}
print(cat.keys()) # dict_keys(['name', 'age', 'color'])
print(cat.values()) # dict_values(['花花', 2, '白色'])
print(cat.items()) # dict_items([('name', '花花'), ('age', 2), ('color', '白色')])

5)update
      字典.update(序列)
      用序列生成的字典去更新原字典(更新方式:不存在就添加,存在就修改)

dict3 = {'a':10, 'b':20,'c':30}
dict3.update({'a':100,'d':40})
print(dict3) # {'a': 100, 'b': 20, 'c': 30, 'd': 40}

猜你喜欢

转载自blog.csdn.net/yang_yang_heng/article/details/106816654