#字典属于一种新的数据结构,称为映射(mapping)
#列表存储数据的性能很好,查询数据的性能很差
#字典中,每一个元素都有唯一的一个名字,查询很好,但存储比较差
#唯一的名字 key
#这个对象 value
#所以字典称为键值对 (key-value)
#每个字典中有多个键值对,每个键值对称为 item
d = {} #创建了一个字典
#语法 {key:value, key:value}
#字典的值可以为任何对象
#字典的建可以时任意不可变对象 (int ,str, bool...tuple) 不可以为list 一般用str
#字典的键不可以重复 ,后面的会覆盖掉前面
d = {
'name':'孙悟空',
'sex':'male'
}
print(d)
#根据键 获取值
print(d['name'])
#创建字典
#使用 {}
d = {}
#使用dict() 函数创建 这种方式创建的key都是str
d = dict(name = 'alex',age = 18, gender = 'male')
#也可以将一个双值子序列转换为字典 [1,2] 'ab' ('a',3)
#序列元素也是序列叫做子序列 [[1,2],[2,3]]
d = dict([['name','alex'],('age',18)])
#len()获取键值对的个数
print(len(d))
# in not in检查字典中是否包含指定的键
#获取字典中的值通过key 为索引
#通过[]获取值时,如果key不存在,会抛出异常
#get(key,[, default]) 用该方法获取字典中的值 key不存在不抛出异常,会输出default
print(d.get('name'))
print(d.get('lover'))
#修改字典
#d[key] = value 修改/增加
#setdefault(key,[,default]) 该方法向字典中添加key-value
#如果key存在,不会进行任何操作
#key不存在,则添加
d.setdefault('name','bob')
d.setdefault('lover','nono')
print(d)
#d.update([other]) 将其他字典中的key-value 添加到字典中,如果有重复的key other替换s中的
w = {'a':1,'b':2}
d.update(w)
print(d)
#删除 del key-value
del d['a']
#方法
#popitem() 随机删,一般是最后一个
#删除之后 会有一个元组作为返回值
res = d.popitem()
print(res)
#pop(key[,default])
res = d.pop('b','dddd')
print(res)
#clear() 清空字典
# d.clear()
# print(d)
#copy() 该方法对字典进行浅复制 id不一样
#浅复制只是简单复制内部对象值 如果值也是一个可变对象,这个可变对象不会被对象
d2 = d.copy()
#遍历字典
# keys() 返回字典中所有的key 返回一个序列,保存字典中所有的key
# values() 返回字典中所有value
# items() 返回字典中所有的项,返回一个序列,子序列是双值序列