字典(dict)

字典简介

  1. 字典是一种新的数据结构,成为映射(mapping)
  2. 字典的作用和列表类似,都是用来存储对象的容器
  3. 顾名思义,字典对数据的查询性能很好
  4. 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素

字典中可以保存多个对象,每个对象都有唯一的名字,我们称这个名字为键(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)
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值