字典函数

函数总览
1、       dict
        2、       items
        3、       keys
        4、       values
        5、       get
        6、       pop
        7、       setdefault(key,value)
        8、       fromkeys(序列,值)
        9、       update
        10、      copy

dict()

功能:格式转化 或者创建空字典
创建空字典的方法
result = dict()
  result = {}
创建有数据的方法一
1、变量 = dict(键=值,键=值,键=值) 
    #这里的键是变量,要符合变量的命名规范,不能是数字和特殊字符等。
result = dict(a='12',b='dd')
print(result,type(result))
{'a': '12', 'b': 'dd'} <class 'dict'>
创建有数据的方法二[序列格式的]
2、变量 = dict([(键,值),(键,值),(键,值),(键,值)])
tmp = {('a','sf'),('12','sdf'),('klf','shs')}
result = dict(tmp)
print(result,type(result))
{'12': 'sdf', 'a': 'sf', 'klf': 'shs'} <class 'dict'>
list1 = [('asd','sdf'),('sss','dddd'),('kkk','ooo')]
result = dict(list1)
print(result,type(result))
{'asd': 'sdf', 'sss': 'dddd', 'kkk': 'ooo'} <class 'dict'>
#将元祖转化为字典
emp1 = (('a','1'),('b','2'),('c','3'))
result = dict(emp1)
print(result,type(result))
{'a': '1', 'b': '2', 'c': '3'} <class 'dict'>
创建有数据的方法二[dict(zip())]
result = dict(zip((键,键,键),(值,值,值)))
以一个序列为键,以另一个序列为值。
t1 = (1,2,3,4,5,6)
t2 = ('a','b','c','d','e','f')
result = dict(zip(t1,t2))
print(result)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f'}
t1 = [1,2,3,4,5,6]
t2 = ['a','b','c','d','e','f']
result = dict(zip(t1,t2))
print(result)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f'}
t1 = {1,2,3,4,5,6}
t2 = ['a','b','c','d','e','f']
result = dict(zip(t1,t2))
print(result)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f'}
#键值数量不匹配时,键值都有的才添加到字典里。其他的只有键或只有值的不添加到字典里。
t1 = {1,2,3,4,5}
t2 = ['a','b','c','d','e','f']
result = dict(zip(t1,t2))
print(result)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
t1 = {1,2,3,4,5,6}
t2 = ['a','b','c','d','e']
result = dict(zip(t1,t2))
print(result)
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}

items()

dict2 = {'a':{1:'2',2:'t'},2:'ee'}
for key,value in dict2.items():
    print(key,value)
a {1: '2', 2: 't'}
2 ee

keys()

备注:字典的键为不可变的类型,由字符串,数值,和元祖。列表时可变的,不能作为字典的键。
#键不能为列表
emp = {[1,2,3]:1,23:'sa'}
print(emp)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-13-fcb3e97b7566> in <module>()
----> 1 emp = {[1,2,3]:1,23:'sa'}
      2 print(emp)


TypeError: unhashable type: 'list'
dict1 = {1:'a',2:2,('sd','sdf'):3}
emp = dict1.keys()
print(emp,type(emp))
for i in dict1.keys():
    print(i,type(i))
dict_keys([1, 2, ('sd', 'sdf')]) <class 'dict_keys'>
1 <class 'int'>
2 <class 'int'>
('sd', 'sdf') <class 'tuple'>

values()

字典的值可以为任意类型,任意值。
ept = {1:{1:1,2:2},'a':{"big","small"},('input','output'):[1,2,3,4],'b':999,'c':'winter'}
result = ept.values()
print(result,type(result))
for i in result:
    print(i,type(i))
dict_values([{1: 1, 2: 2}, {'small', 'big'}, [1, 2, 3, 4], 999, 'winter']) <class 'dict_values'>
{1: 1, 2: 2} <class 'dict'>
{'small', 'big'} <class 'set'>
[1, 2, 3, 4] <class 'list'>
999 <class 'int'>
winter <class 'str'>

get()

dicte = {1:'a',2:'b',3:'c'}
print(dicte.get(1))
print(dicte.get(2))
a
b

pop()

dictp = {1:'a',2:'b',3:'c',4:'d'}
result = dictp.pop(1)
print(dictp)
print(result)
{2: 'b', 3: 'c', 4: 'd'}
a

setdefault

功能:向字典中根据键添加值;如果有该键,则不做任何改变,并不报错;如果没有该键,则添加键和值。
    1.当字典中没有添加的键时,会往字典里添加值。返回值是添加的值。setdeault 会直接改变原有字典。
    2.当字典中有该键时,继续添加的话,不会对原有字典做任何改变,表达式的返回值是字典中的原有值。
emp = {'a':'aaaa','b':'bbbb','c':'cccc'}
result = emp.setdefault('d','dddd')
print(result)
print(emp)
dddd
{'a': 'aaaa', 'b': 'bbbb', 'c': 'cccc', 'd': 'dddd'}
emp = {'a':'aaaa','b':'bbbb','c':'cccc','d':None}
result = emp.setdefault('d','dddd')
print(emp,result)
{'a': 'aaaa', 'b': 'bbbb', 'c': 'cccc', 'd': None} None

### fromkeys
创建一个字典,以一个序列为字典的键,以一个确定的值为字典所有键的值。

list1 = [1,2,3,4,5,6]
dict1 = {}.fromkeys(list1,'a')
print(dict1)
{1: 'a', 2: 'a', 3: 'a', 4: 'a', 5: 'a', 6: 'a'}
list1 = ['a','b','c','d','e']
dict1 = {'first':"zhangsan",'second':'lisi'}
result = dict1.fromkeys(list1,'done')
print(result)
## 当字典里有数据时,结果是覆盖了之前的字典里的数据,当作空字典。
{'a': 'done', 'b': 'done', 'c': 'done', 'd': 'done', 'e': 'done'}
{'first': 'zhangsan', 'second': 'lisi'}

update

更新字典,直接改变原有字典。
dict1 = {'a':"first",'b':'second','d':'third'}
dict2 = {1:'aaa',2:'bbb',3:'ccc'}
dict1.update(dict2)
print(dict1)
{'a': 'first', 'b': 'second', 'd': 'third', 1: 'aaa', 2: 'bbb', 3: 'ccc'}
None

copy

dict1 =  {'user':'runoob','num':[1,2,3]}

dict2 = dict1          # 浅拷贝: 引用对象
dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用

# 修改 data 数据
dict1['user']='root'
dict1['num'].remove(1)

# 输出结果
print(dict1)
print(dict2)
print(dict3)
{'user': 'root', 'num': [2, 3]}
{'user': 'root', 'num': [2, 3]}
{'user': 'runoob', 'num': [2, 3]}