【python】字典的定义与操作

1. 字典的定义

字典是具有键值映射关系的一组无序数据组合,是Python中另一个非常有用的内置数据类型。
    键值映射关系?   一一匹配的关系   key:value
    无序数据组合?  没有索引值
标识符:{}
关键字:dict
元素:键值对的形式来存储key:value,如果有多个元素,元素之间用逗号隔开
    key支持的数据类型:数字、字符串、元组;
        key必须是唯一的,并且是不可以修改的
    value支持的数据类型:所有的Python数据类型
特点:无序可变
# 定义一个空字典
# 获取字典的长度 len()
d = {}
print(d,type(d),len(d))

# 定义一个非空字典
# 查看列表类型 type()
stu = {
    'name':'zs',
    'age':18,
    'addr':'北京',
    'class':211,
    'age1':20  #如果key重复,则只会保留一个,并且后面的key的value会覆盖前面key的value
}
print(stu,type(stu),len(stu))

d2 = {
    1:'zs',
    3.14:'PI',
    True:'布尔值',
    'class':{'id':1001,'name':'zs'},
    (1,2,3):['hello','vip','python'],
    #[1,2,3]:['hello','vip','python']  #TypeError: unhashable type: 'list'
}
print(d2,type(d2),len(d2))


# 字典不支持加号拼接和乘号多次输出
print(stu + d2)
print(stu * 2)

2. 字典操作--查

字典取值,字典是根据key来进行取值,key是唯一
语法:字典名[key]
查看列表元组中的元素,索引值的方式取值
d1 = {'id':1001,
      'name':'lisa',
      'age':18,
      'skill':['python','自动化测试','性能测试','接口测试'],
      'hobby':('singing','swimming'),
      'addr':{'company':'北京','local':'长沙'}}

# 字典中单个value的获取
print('lisa同学的技能:',d1['skill'])  #KeyError: 'skill123'
print('lisa同学的年龄:',d1['age'])

# 嵌套字典、列表、元组元素值的获取   --》一层一层剖析  -->解题思路
print('lisa同学的居住地址:',d1['addr']['local'])
print('lisa同学的最后的2个技能:',d1['skill'][-2:])
print('lisa同学的姓名姓氏(li):',d1['name'][:2])

3. 字典操作----增

增加字典中的元素值
语法:字典名[不存在的key]=新值
# 从控制台接受输入的用户名和密码,并将数据添加在空字典中存储
d = {}
username = input('username:')
pwd = input('pwd:')
print('d结果:',d)
d['uname'] = username
print('添加username之后,d结果:',d)
d['passwd'] = pwd
print('添加pwd之后,d结果:',d)

# 在第一题的字典中的插入身份状态,status:1
d['status'] = 1
print('添加身份状态之后,d结果:',d)

4. 字典操作---删

删除字典中的元素值(一个键值对)
    pop()方法:通过key来进行删除,删除键值对,在删除字典时pop中必须要给定key值,不能为空
    popitem()方法:删除字典中的最后一个键值对,然后获取到删除的这个键值的数据
    clear()方法:清空字典
    del 字典名[key]:通过key来进行删除,删除键值对
d4 = {'class':'1',
      'teacher':['kate','aa'],
      'vip':{1:'张三',2:'李四'},
      'sub':('python'),
      'des':'hahaha'}

# 删除元素class
# 找到这个键值对,再去加上del
del d4['class']
print(d4)

print(d4.pop('class'))  
print(d4)
# 删除字典中的最后一个元素,并输出删除的键值对
print('原字典:',d4)
res = d4.popitem()
print('popitem字典:',d4)
print('========')
print('获取删除的键值对:',res,type(res))

# 清空字典
# d4.clear()
# print(d4)

5. 字典操作---改

修改字典中的元素值
语法:字典名[存在的key]=新值
d5 = {'class':'211',
      'teacher':['muzi','aa'],
      'grade':{1:'张三',2:'李四'},
      'sub':('python'),
      'des':'hahaha'}

# 将des的值修改为:备注信息
# 修改是一个操作,会在原字典上进行更改
print(d5)
d5['des'] = '备注信息'
print(d5)

# 嵌套修改:将vip中李四修改为lisa
# 拿到李四   # 再赋值
d5['grade'][2] = 'lisa'
print(d5)

# 嵌套删除,只删除teacher中的aa
# 1-teacher的value
res = d5['teacher']
print(res)
# 2-删除['muzi', 'aa']中的'aa'
res.pop()
print(res)

del d5['teacher'][-1]
print(d5)

6. 字典常用其他方法

字典名.items():返回可遍历的(键,值)元组数组
字典名.keys():返回一个字典所有的键,返回一个迭代器,可以使用 list() 来转换为列表
字典名.values():返回一个字典所有的值,返回一个迭代器,可以使用 list() 来转换为列表
字典名.copy():复制字典,生成一个新字典。列表也可以使用copy()方法来复制列表。
字典名.get(key,default):根据key去字典中获取对应的值,如果key不存在则返回给定的默认值,不会报错
d6 = {'class':'v211',
      'teacher':['muzi','aa'],
      'vip':{1:'张三',2:'李四'},
      'sub':('python'),'des':'hahaha'}
# 输出所有的key值,可以用list()转换进行取值查看
print('输出所有的key值',d6.keys(),type(d6.keys()))
res = list(d6.keys())
print(res,type(res),res[0])

# 输出所有的values值,可以用list()转换进行取值查看
print('输出所有的values值',d6.values(),type(d6.values()))
res = list(d6.values())
print(res,type(res),res[1])

# 输出所有的(key,values)的值
print('输出所有的(key,values)值',d6.items(),type(d6.items()))
# for循环的遍历来进行获取

# # 定义一个新的字典d1,内容与d6一致
d1 = d6
print(d1)

d2 = d6.copy()
print(d2)
#
# # 获取值class的值,如果没有class,则给定默认值vip_211
print(d6.get('vip111','Not Found'))
if d6.get('vip111','Not Found') == 'Not Found':
    print('这个字典中没有这个Key存在')
else:
    print('这个字典有这个Key存在')

7. 转换函数

数字--字典
字符串--字典

元组--字典(key:value)
    ([a,b],[1,2],[4,5])  --可以转
    ((a,b),(1,2))  --可以转
    (a,b,1,2)  --不能转
列表--字典
    [[a,b],[1,2],[4,5]]  --可以转
    [(a,b),(1,2)]  --可以转
    [a,b,1,2]  --不能转
 dict(其他类型数据),将其他类型数据转为字典
 元组tpl = (('name','muzi'),('age',18))转换为字典
 列表lst = [('name','Lisa'),('age',18)]转换为字典

 tpl = ('a','b',1,2)
 print(dict(tpl))

tpl = (('name','muzi'),('age',18))
print(dict(tpl))

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值