字典简介
- 字典是一种新的数据结构,成为映射(mapping)
- 字典的作用和列表类似,都是用来存储对象的容器
- 顾名思义,字典对数据的查询性能很好
- 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素
字典中可以保存多个对象,每个对象都有唯一的名字,我们称这个名字为键(key),这个对象我们称为值(value),所以字典也叫做键值对(key-value)结构。每个对象都可以有多个键值对,每一个键值对叫做一项(item)。
创建字典
使用 { } 创建字典
# 语法:
# 变量 = {key:value,key:value,key:value}
dict = {} # 创建了一个空字典
dict = {
'name':'彩虹马',
'age':2,
'color':'彩色'
}
print(dict,type(dict))
- 字典的值可以是任意对象,但是字典的键只能是任意的不可变对象(int、str、bool、tuple…)
- 字典的键是不能重复的,出现重复后面的键值对会替换前面的同名键值对
dict = {
'name':'彩虹马',
'age':2,
'color':'彩色',
'name':'阳光彩虹小白马'
}
print(dict,type(dict))
- 根据键来获取值,输入字典不存在的值会报错
dict = {
'name':'彩虹马',
'age':2,
'color':'彩色'
}
print(dict['name'],dict['age'],dict['color'])
使用dict() 函数来创建字典
- 每一个参数都是一个键值对,参数名是键和值。这种方式创建的字典,key都是字符串。
dict = dict(name='彩虹马',age='2',color='彩色')
print(dict)
将一个包含有双值子序列的序列转换为字典
双值序列:序列中只有两个值。
例如:[1,2] (‘a’,0) ‘ab’
子序列:如果序列中的元素也是序列,那么我们称这个元素为子序列
dict = ([('名字','彩虹马'),('年龄','2'),('颜色','彩色')])
print(dict,type(dict))
字典的使用
- len() :获取字典中键值对的个数
dict = dict(name='彩虹马',age='2',color='彩色')
print(len(dict))
- in :检查字典中是否包含指定的键
- not in :检查字典中是否不包含指定的键
dict = dict(name='彩虹马',age='2',color='彩色')
print('name' in dict)
print('name' not in dict)
- 获取字典中的值,根据键来获取值
# 语法:dict[key]
dict = dict(name='彩虹马',age='2',color='彩色')
print(dict['name'])
x = 'age'
print(dict[x])
- get(key[, default]):根据键来获取字典中的值。如果获取的键在字典中不存在会返回None
dict = dict(name='彩虹马',age='2',color='彩色')
print(dict.get('name'))
# 如果获取到的键在字典中不存在,会返回None
print(dict.get('number'))
# 也可以指定一个默认值作为第二个参数
print(dict.get('number','默认值'))
修改字典
- 字典[key] = value
如果key存在则覆盖,不存在则添加
dict = dict(name='彩虹马',age='2',color='彩色')
dict['name'] = '阳光彩虹小白马' # 修改字典的key-value
dict['home'] = '彩虹海' # 向字典中添加key-value
- setdefault(key[, default])
向字典中添加key-value
如果key已经存在于字典中,则返回key的值
如果key不存在,则向字典中添加这个key,并设置value
dict = dict(name='彩虹马',age='2',color='彩色')
result = dict.setdefault('name','阳光彩虹小白马')
result = dict.setdefault('number','20')
print(result)
print(dict)
- update([字典]) :将其他的字典中的key-value添加到当前字典中
如果有重复的key,后面值替换到前面同名key的值
dict1 = {'a':1,'b':2,'c':3}
dict2 = {'d':4,'e':5,'f':6}
dict1.update(dict2)
print(dict1)
- del :删除字典中的key-value
dict = dict(name='彩虹马',age='2',color='彩色')
del dict['name']
print(dict)
- popitem() :随机删除字典中的一个键值对,一般都会删除最后一个键值对
删除之后会将删除的key-value作为返回值返回
返回的是一个元组,元组中有两个元素,第一个元素时删除的key,第二个是删除的value
当使用popitem()删除一个空字典时,会抛出异常
dict = dict(name='彩虹马',age='2',color='彩色')
val = dict.popitem()
print(val)
print(dict)
- pop(key[, default]) :根据key删除字典中的key-value,返回被删除的value
如果删除不存在的key,会抛出异常。指定默认值会返回默认值
dict = dict(name='彩虹马',age='2',color='彩色')
result = dict.pop('name')
print(result)
result = dict.pop('number','默认值')
print(result)
- clearI() :清空字典
dict = dict(name='彩虹马',age='2',color='彩色')
print(dict.clear())
- copy() :对字典进行浅复制
复制以后的对象与原对象互相独立,修改一个不会影响另一个
# 复制以后的对象与原对象互相独立,修改一个不会影响另一个
dict = dict(name='彩虹马',age='2',color='彩色')
dict1 = dict.copy()
print('dict = ',dict , id(dict))
print('dict1 = ',dict1, id(dict1))
浅复制会简单复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制
dict = dict(name=dict(name1='彩虹马',name2='阳光彩虹小白马'),age='2',color='彩色')
dict1 = dict.copy()
print('dict = ',dict , id(dict))
print('dict1 = ',dict1, id(dict1))
dict1['name']['name1'] = '小黑马'
print('dict = ',dict , id(dict))
print('dict1 = ',dict1, id(dict1))
遍历
- keys() :返回字典的所有key
该方法会返回一个序列,序列中保存字典的所有的键
dict = {'name':'彩虹马','age':'2','color':'彩色'}
d = dict.keys()
print(d)
for k in dict.keys():
print(k,dict[k])
- values() :返回字典所有的值
dict = {'name':'彩虹马','age':'2','color':'彩色'}
d = dict.values()
print(d)
for v in dict.values():
print(v)
- items() :返回字典中所有的项
返回一个序列,序列中包含有双值子序列(key-value)
dict = {'name':'彩虹马','age':'2','color':'彩色'}
print(dict.items())
for k,v in dict.items():
print(k,'=',v)