一、介绍
dict 的用法比较简单,它可以存储任意值,并允许是不同类型的值,下面实例来说明:
下面例子中 a 是整数, b 是字符串, c 是数组,这个例子充分说明哈希数组的适用性。
每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。
键是唯一的,字典只认最后一个赋的键值。
不允许同一个键出现两次。创建时如果同一个键被赋值两次
二、字典初始化
1、普通赋值方法
print("===="*5,"dict init")
dic1 = {'a': 100, 'b':'boy', 'c':['o', 'p', 'q']}
print(type(dic1))
print("dic1:",dic1)
#可以直接增加一个元素,如果同名,则会改变原来的key的元素的值
dic1['d'] = 'dog'
dic1['c'] = 111 # 更新 'c'
print("dic1:",dic1)
#键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
dic2 = {'a': 1}
print ("dic2: ", dic2)
dic2 = {('a'): 1}
print ("dic2: ", dic2)
dic2 = {('a','b'): 1}
print ("dic2: ", dic2)
#dic2 = {['a']: 1} #error
2、元组初始化方法
print("===="*5,"touple init")
tuple1 = ('name', 'age', 'sex')
dict1 = dict.fromkeys(tuple1)
print ("新的字典为 : %s" % str(dict1))
dict1 = dict.fromkeys(tuple1, 10)
print ("新的字典为 : %s" % str(dict1))
dict1 = dict.fromkeys(tuple1, [1,2,3])
print ("新的字典为 : %s" % str(dict1))
[外链图片转存失败(img-NuyIuIIR-1567578804297)(https://raw.githubusercontent.com/ZhouziqunZZQZZQ/picBed/master/20190701233415.png)]
三、字典的引用遍历合并
print("===="*5,"key and value")
dic1 = {'a':1,'b':2,'c':3}
#输出所有的key
print("keys:",dic1.keys())
print(type(dic1.keys()))
#输出所有的value
print("values:",dic1.values())
print(type(dic1.values()))
#同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常
print(dic1.get('a',"don not find"))
print(dic1.get('z',"don not find"))
print(dic1.get('z'))
print('a' in dic1)
#遍历
for k in dic1:
print(dic1.get(k))
dic1 = {'a':1,'b':2,'c':3}
print ("a 键的值为 : %s" % dic1.setdefault('a', 'ff'))
print ("d 键的值为 : %s" % dic1.setdefault('d', 'ff'))
print ("新字典为:", dic1)
dic1 = {'a':1,'b':2,'c':3}
print (type(dic1.items()))
print ("Value : %s" % dic1.items())
for i,j in dic1.items():
print(i, ":\t", j)
#计算字典元素个数,即键的总数
dic1 = {'a':1,'b':2,'c':3}
print("len:",len(dic1))
#输出字典,以可打印的字符串表示。
dic1 = {'a':1,'b':2,'c':3}
print("str:",str(dic1))
#增加合并字典
dic1 = {'a':1,'b':2,'c':3}
dic2 = {'d':4,'e':5,'f':6}
dic1.update(dic2) #不可以使用加法
print("dic1:",dic1)
四、字典的浅复制
#返回一个字典的浅复制
print("===="*5,"copy")
dic1 = {'a':1,'b':[2,3,4],'c':3}
dic2 = dic1 # 浅拷贝: 引用对象
dic3 = dic1.copy() # 浅拷贝: 深拷贝: 父对象(一级目录),子对象(二级目录)不拷贝,还是引用
# 修改 data 数据
dic1['a']=100
dic1['b'].remove(2)
# 输出结果
print(dic1)
print(dic2)
print(dic3)#存在浅拷贝
五、字典删除
#删除
print("===="*5,"del")
dic1 = {'a':1,'b':2,'c':3}
dic2 = {'d':4,'e':5,'f':6}
dic3 = {'g':7,'h':8,'i':9}
dic2.clear() #清空字典 后为空字典 还属于有定义状态 删除字典内所有元素
print("dic2:",dic2)
print(type(dic2.keys()))
del dic3['g']
print("dic3:",dic3)#删除dic后属于没有定义状态会报错
del dic3
#print("dic3:",dic3)#删除dic后属于没有定义状态会报错
dic1 = {'a':1,'b':2,'c':3}
pop_obj=dic1.popitem()
print(pop_obj)
print(dic1)
dic1 = {'a':1,'b':2,'c':3}
pop_obj=dic1.pop('a')
print(pop_obj)
print(dic1)
dic1 = {'a':1,'b':2,'c':3}
pop_obj=dic1.pop('d','none')
print(pop_obj)
print(dic1)