Python学习之字典-dict

字典是用大括号扩起来的,以逗号分隔的,一组键值对,键和值以冒号分隔 dic = {‘key’: ‘value’}

注意:
在Python3.7之前字典都是无序的,从3.7开始字典是有序的,它会保持插入时的顺序,点击查看官方文档
在这里插入图片描述

字典的创建方式

方式一 基本赋值:

例1:

dt1 = {'name': '张三', 'age': '18'}
print(dt1)

方式二 dict转换:

例1:

dt2 = dict(name='张三', age='18')
print(dt2)

例2:

li = [('name', '张三'), ('age', '18')]
dt2 = dict(li)
print(dt2)

例3:

dt2 = dict(zip('abc', [1, 2, 3]))
print(dt2)

方式三 字典推导式

例1:

li1 = ['name', 'age']
li2 = ['张三', '18']
dt3 = {li1[i]: li2[i] for i in range(len(li1))}
print(dt3)

方式四 fromkeys

例1:

dt4 = dict.fromkeys('abcd', 'None')
print(dt4)

字典增加元素

字典键值对的增加有两种方式:

方式一

是通过赋值的方式给字典添加

语法:
dict_name[key] = value

例1:

dt = {'name': 'Tony Stark', 'age': 30}
dt['gender'] = '男'
print(dt)

运行结果:

{'name': 'Tony Stark', 'age': 30, 'gender': '男'}

方式二

是利用 setdefault 方法添加,该方法有两个参数,第一个参数是键,第二个参数是默认值
注意:
如果 setdefault 里面的key已经存在了,则会返回该key对应的value,如果key不存在,则加入,如果未给出value的值,默认是None

语法:

setdefault(self, key, default=None, /)	
		Insert key with a value of default if key is not in the dictionary.
		Return the value for key if key is in the dictionary, else default.

例1:

dt = {'name': 'Tony Stark', 'age': 30}
dt['gender'] = '男'
# 方式二:
dt.setdefault('hobby', '骑行')
print(dt)

运行结果:

{'name': 'Tony Stark', 'age': 30, 'hobby': '骑行'}

字典删除元素

pop删除元素
pop删除需要给定key,如果key存在则删除,不存在而且没有给定默认值,就会报错

例1:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.pop('age')
print('删除后的字典是:', dt)
print('被删除键的值是:', ret)

运行结果是:

删除后的字典是: {'name': 'Tony Stark'}
被删除键的值是: 30

例2:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.pop('hobby', '无此键名')			# 有默认值,当键名不存在,返回默认值
print('删除后的字典是:', dt)
print('被删除键的值是:', ret)

运行结果:

删除后的字典是: {'name': 'Tony Stark', 'age': 30}
被删除键的值是: 无此键名

例3:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.pop('hobby')						# 没有默认值会报错
print('删除后的字典是:', dt)
print('被删除键的值是:', ret)

运行结果:

Traceback (most recent call last):
  File "/projects/oldboy/laptop/day05/dict字典.py", line 5, in <module>
    ret = dt.pop('hobby')
KeyError: 'hobby'

字典更改元素值

改变字典的值,由于字典的键是唯一的不能重复的,因此改变字典的键的值可以直接赋值
例1:

dt = {'name': 'Tony Stark', 'age': 30}
dt['age'] = 31
print(dt)

运行结果:

dt = {'name': 'Tony Stark', 'age': 31}

字典查询元素的值

方式一
直接取值的方式获取键的值,如果键不存在,会报错,推荐使用方式二的get方法
例1:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt['name']
print('指定键的值是:', ret)

运行结果:

指定键的值是: Tony Stark

方式二
通过get方法获取, 如果键不存在返回None
语法:

 get(self, key, default=None, /)
		Return the value for key if key is in the dictionary, else default.

例1:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.get('age')
print('指定键的值是:', ret)

运行结果:

指定键的值是: 30

其他方法

get

get方法会通过给定的键来获取值,与 字典名[键名] 取值效果一致,区别在于,用 get(键名) 方式当键不存在时,不会报错
例:

dicts = {'name':'张三', 'age': 18}
print(dicts.get('gender'))      # 键gender不存在,返回None
print(dicts['gender'])          # 键gender不存在,报错

运行结果:

None
Traceback (most recent call last):
  File "/root/projects/python/desktop/study/demo.py", line 3, in <module>
    print(dicts['gender'])
KeyError: 'gender'

pop

pop 根据给定的键来删除对应的值,并返回删除后的值,如果键不存在,报错

dicts = {'name':'张三', 'age': 18}
ret = dicts.pop('age')
print(ret)
print(dicts)

运行结果:

18
{'name': '张三'}

popitem

popitem删除一个键值对,并返回被删除的键值对(以元组的方式返回),默认是删除最后一个
例1:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.popitem()
print('删除后的字典是:', dt)
print('被删除键的值是:', ret)

运行结果:

删除后的字典是: {'name': 'Tony Stark'}
被删除键的值是: ('age', 30)

keys

keys获取字典的所有的键,返回类型是dict_keys
例1:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.keys()
print('指定键的值是:', ret)
print('类型是:', type(ret))

运行结果:

指定键的值是: dict_keys(['name', 'age'])
类型是: <class 'dict_keys'>

values

values是获取字典的所有的值,返回类型是dict_values
例1:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.values()
print('指定键的值是:', ret)
print('类型是:', type(ret))

运行结果:

指定键的值是: dict_values(['Tony Stark', 30])
类型是: <class 'dict_values'>

items

items是以元组的方式返回键值对,返回类型是dict_items
例1:

dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.items()
print('指定键的值是:', ret)
print('类型是:', type(ret))

运行结果:

指定键的值是: dict_items([('name', 'Tony Stark'), ('age', 30)])
类型是: <class 'dict_items'>

copy

copy 用于复制一个字典,同样这个跟一样存在一个深浅复制问题
例1:

import copy

dt = {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
ret = copy.deepcopy(dt)					# 这里如果不用深拷贝,那么在修改了dt后,ret的值也会修改
dt['hobby'][1] = '爬山'
print('dt的ID是:', id(dt))
print('ret的ID是:', id(ret))
print('dt的内容是:', dt)
print('ret的内容是:', ret)

运行结果:

dt的ID是: 140674238588752
ret的ID是: 140674109081352
dt的内容是: {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '爬山']}
ret的内容是: {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}

例2:

dt = {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
ret = dt.copy()							# 浅拷贝
dt['hobby'][1] = '打乒乓球'
print('dt的ID是:', id(dt))
print('ret的ID是:', id(ret))
print('dt的内容是:', dt)
print('ret的内容是:', ret)

运行结果:

dt的ID是: 140709526153040
ret的ID是: 140709526153112
dt的内容是: {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '打乒乓球']}
ret的内容是: {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '打乒乓球']}

clear

清空字典,返回值是None
例1:

dt = {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
ret = dt.clear()
print('dt的内容是:', dt)
print('ret的内容是:', ret)

运行结果:

dt的内容是: {}
ret的内容是: None

update

update是将一个字典和另一个字典合并,如果有相同的键,值会被更新,如果没有新键会加入到字典中
例1:

dt = {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
dt2 = {'name': 'Tom', 'Phone_no': 123456}				# 相同的键 name ,dt中name的值会被更新
ret = dt.update(dt2)
print('dt的内容是:', dt)
print('ret的内容是:', ret)

运行结果:

dt的内容是: {'name': 'Tom', 'age': 30, 'hobby': ['骑行', '游泳'], 'Phone_no': 123456}
ret的内容是: None

setdefault

setdefaul(键, 值) 当键在字典中存在时,返回该键的值,字典中没有该键时,返回后面值的内容

dicts = {'name':'张三', 'age': 18}
ret = dicts.setdefault('age', '20')
ret2 = dicts.setdefault('gender', '男')
print(ret)
print(ret2)
print(dicts)

运行结果:

18{'name': '张三', 'age': 18, 'gender': '男'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爬坡的蜗牛

你的鼓里是我创造最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值