一、字典和字符串等的区别

字典是映射类型,不是序列类型

字符串/元组/列表都是序列类型

用中括号标识的是列表

用小括号或者逗号标识的是元组

用大括号表示的是字典

二、字典的组成:

1、字典由多个键和对应的值组成

2、通过键可以访问对应的值

三、常用的创建字典的方法

1、dict1 = {'1':'11','2':'22','3':'33','4':'44'}

2、通过dict()工厂函数来创建,调用则生成一个字典的实例

dict3 = dict(传入一一对应的元组或者列表)

dict3 = dict((('1','11'),('2','22')))

dict4 = dict((['1','11'],['2','22']))

3、通过关键字key == value来创建

dict5 = dict(a = 'aa',b = 'bb')

4、直接给字典里面的键赋值

如果是原本存在的则会进行修改:dict['1'] ='111'

如果是原本不存在的则会新增:dict['3']='333'


四、内建方法:

fromkeys(...):通过fromkeys去创建并返回一个新的字典,不能使用fromkeys方法去修改

两个参数:S-->字典的键值;V-->对于的值,不提供则默认为none

dict6 = {}
dict6 = dict6.fromkeys((1,2,3))
print(dict6)
dict6 = dict6.fromkeys((1,2,3),'value')
print(dict6)

{1: None, 2: None, 3: None}


{1: 'value', 2: 'value', 3: 'value'}

dict6 = dict6.fromkeys((1,2,3),('value1','value2','value3'))

不能分别给每一个key赋不同的值,使用fromkey方法来创建的所有key都是相同的值

{1: ('value1', 'value2', 'value3'), 2: ('value1', 'value2', 'value3'), 3: ('value1', 'value2', 'value3')}

2、访问字典的方法:(keys(),values(),items())

keys():返回字典键的引用

dict1 = dict.fromkeys(range(3),'ok')
print(dict1)
for eachkey in dict1.keys():
    print(eachkey)
for eachValue in dict1.values():
    print(eachValue)
for eachItem in dict1.items():
    print(eachItem)

{0: 'ok', 1: 'ok', 2: 'ok'}


0


1


2


ok


ok


ok


(0, 'ok')


(1, 'ok')


(2, 'ok')



3、使用get()方法可以更加友好的处理越界信息

print(dict1.get(3))

None

print(dict1[3])

KeyError: 3

4、通过成员资格操作符来判断一个键是否在字典中

in

not in

print(2 in dict1)
print(3 in dict1)

True


False

在字典中检查键的成员资格比序列更高效,当数据比较多时,两者的差距相当明显

在字典中检查的是键而不是值,而序列中查找的是元素的值而不是元素的索引号

5、清空字典则使用clear()方法:

dict1.clear()

就清空了

a = {'姓名':'小甲鱼'}
b = a
a.clear()
print(a)
print(b)

{}


{}


使用dict1 = { }不能完全清空

a = {'姓名':'小甲鱼'}
b = a
a = {}
print(a)
print(b)

{}


{'姓名': '小甲鱼'}---B仍能访问,不够安全

6、copy()圈拷贝字典

赋值和全拷贝的区别:

a = {1:'one',2:'two',3:'three'}
b = a.copy()#双胞胎,不同的卵子
c = a#双胞胎,同一个卵子
print(a,id(a))
print(b,id(b))
print(c,id(c))

如果a修改则c也会跟着修改,c修改则a也会修改,但是b不会受到干扰

{1: 'one', 2: 'two', 3: 'three'} 39270664
{1: 'one', 2: 'two', 3: 'three'} 39270792

{1: 'one', 2: 'two', 3: 'three'} 39270664



7、pop()和popitem()的区别

字典是无序的

pop删除指定的key和value

a = {1:'one',2:'two',3:'three'}
a.pop(2)
print(a)

{1: 'one', 3: 'three'}


popitem随机删除key和value

a = {1:'one',2:'two',3:'three'}
a.popitem()
print(a)

{2: 'two', 3: 'three'}


8、setdefault() 

a = {1:'one',2:'two',3:'three'}
a.setdefault(4)
print(a)

{1: 'one', 2: 'two', 3: 'three', 4: None}


a = {1:'one',2:'two',3:'three'}
a.setdefault(5,'hha')
print(a)

{1: 'one', 2: 'two', 3: 'three', 5: 'hha'}


9、update()利用字典或者映射关系去更新另一个字典

a = {1:'11'}
b = {2:'22'}
a.update(b)
print(a)
print(b)




{1: '11', 2: '22'}


{2: '22'}