Python字典学习总结

构建字典


无序 不可索引
1、使用大括号

dic = { } #空字典
dic = {'name':'Rachel','age':25}

2、使用dict方法

[ ] dict(key=value)
dic = dict(a=1,b=2,c=3)
dic = dict('a'=1,'b'=2) #-->语法错误,报错
[ ] dict(iterable)

#iterable的每个元素必须是两元素的数据对象,就是元组放在列表中

offer = dict([('company','huawei'),('salary',1500),('reward',10000)])
print(offer)
#output-->{'company': 'huawei', 'salary': 1500, 'reward': 10000}

3、dict类的方法fromkeys,构造的字典key来自于给定的序列(元组,列表,字符串),
第二个参数是所有value的初始值,不给定则默认为None

调用fromkeys()函数时:

  • 直接用dict类名调用

  • 用任一个字典变量调用

    [ ]fromkeys(seq,value)
    

i.seq为列表

lst = ['a','b','c','d','e']
dic= dict.fromkeys(lst,5)
print(dic)
#-> {'a': 5, 'b': 5, 'c': 5, 'd': 5, 'e': 5}  

ii.seq为元组

t = ('a','b','c','d','e')
dic= dict.fromkeys(t,5)
print(dic)
#-> {'a': 5, 'b': 5, 'c': 5, 'd': 5, 'e': 5}  

iii.seq为字符串

s = 'abcde'
dic = dict.fromkeys(s)
print(dic)
#->{'a': None, 'b': None, 'c': None, 'd': None, 'e': None}

iv.seq为集合

hyc_set = {'a','b','c','d','e'}
dic= dict.fromkeys(hyc_set,5)  #用dict类名直接调用
print(dic)
#->{'a': 5, 'c': 5, 'd': 5, 'b': 5, 'e': 5}

v.seq为字典,取原字典中的key,生成一个新的字典

dic = {'name':'Rachel','age':25}
dic_new= dic.fromkeys(dic,'aa')  #可以用任一个字典变量调用,且不改变调用对象的值
print(dic_new)
#->{'name': 'aa', 'age': 'aa'}

4.copy()
根据已有字典拷贝一个新的字典

dic = {'name':'Rachel','age':25}
dic_new= dic.copy()
print(dic_new)
print(id(dic),id(dic_new))# 同样是浅拷贝
#-->{'name': 'Rachel', 'age': 25}
#-->2819141912760 2819140572936

检索元素


1、通过key检索元素value
dic[key] #如果key存在,则返回对应value;否则,报错

dic = {'name':'Rachel','age':25}
print(dic['name'])
#-->Rachel

2、判断key是否存在,存在返回True,不存在返回False
in 或 not in

dic = {'name':'Rachel','age':25}
print('sex' in dic)
#->False

3、get(key[,default])
检索元素中的key,如果key存在,返回对应的value;
如果不存在,且指定default,返回指定的default默认值;
如果不存在,且没指定default,则返回None

dic = {'name':'Rachel','age':25}
print(dic.get('sex'))-->None
print(dic.get('height','180cm'))-->180cm

4、len()检索字典元素个数

添加元素


dic[key]=值 对不存在的键直接赋值,即添加key-value对

dic = {'name':'Rachel','age':25}
dic['sex'] = 'girl'
print(dic)
#->{'name': 'Rachel', 'age': 25, 'sex': 'girl'}

修改元素


1、对已存在的key重新赋值,即更新value,修改只能修改value,key不能改

dic = {'name':'Rachel','age':25}
dic['age']=18
print(dic)
#->{'name': 'Rachel', 'age': 18}

2、update(key/value)根据给定的key/value对更新键的值,如果键不存在则新插入
参数形式:字典,key=value,2个元素的迭代容器对象

d={'one':1,'two':2,'three':3,'four':4}
d.update(five=5,six=6)
print(d)
#->{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6}
d.update({'one':11,'two':22})#以字典作为参数
print(d)
#->{'one': 11, 'two': 22, 'three': 3, 'four': 4, 'five': 5, 'six': 6}
d.update((('five',55),('six',66)))#元组形式
d.update((['three',33],['four',44]))#列表形式

删除元素


1、del dic[key]
删除某个key-value,如果key不存在会报错
2、clear() 删除字典中所有元素

d={'one':1,'two':2,'three':3,'four':4}
d.clear() 
print(d)
#--> {}

3、pop(key[,default])用来移除给定的元素并返回移除的key对应的value,
如果元素不存在,则返回default
如果元素不存在,也没有给定default,则报错

d={'one':1,'two':2,'three':3,'four':4}
d.pop('two') 
#-->2 

4、popitem()用于移除并返回一个(key,value),并返回移除的元素
每次移除一个
按后进先出顺序移除(python 3.7之后)

d={'one':1,'two':2,'three':3,'four':4}
d.popitem()
#-->('four', 4)

遍历


d={‘one’:1,‘two’:2,‘three’:3,‘four’:4}

1、keys()遍历所有key

for i in d.keys():   #因为字典的key可遍历,也可以直接写 for i in d:
    print(i)

2、values()遍历所有值

for i in d.values():
    print(i)

3、items()遍历所有key和value

for key,value in d.items():
    print(key,"-->",value)

4、iter(d)返回字典中所有key组成的可迭代对象,等价于iter(d.keys())

print(iter(d))
for i in iter(d):
    print(i)
#<dict_keyiterator object at 0x0000029061F63098>
#one
#two
#three
#four

补充:keys()、values()、items()返回字典视图对象,会随着原字典的改变而改变
将视图对象构建一个列表
如:list(d.keys())
5、字典解析

d = {x: x*2 for x in range(4) }
print(d)
d2={k:2*v for k,v in d.items()}
print(d2)
#{0: 0, 1: 2, 2: 4, 3: 6}
#{0: 0, 1: 4, 2: 8, 3: 12}

字典元素存储

存:
对于存储dict元素的时候,先计算key的hash值,然后将hash值存储到dic对象中,与每个hash同属存储的还有两个引用,key的引用地址,value的引用地址
一个hash值8字节,每个引用地址8字节,所以对于一个dict的元素,除了数据实际数据占用的内存空间,至少需要占用24个字节(每个引用地址是8个字节)
取:
如果要从dict中取出key对应的那个记录,则首先计算这个key的hash值,然后从dict对象中查找这个hash值,能找到说明有对应的记录,然后找到对应的key、value数据
补充:不可变对象才可以hash,所以字典的key必须是不可变类型
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值