08 Python学习之字典-dict

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

字典增加元素

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

方式一

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

语法:
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,如果可以不存在,则加入并且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

其他方法

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
原文地址:https://www.cnblogs.com/zcf-blog/p/13188334.html