python基础 ---核心数据结构之(字典)


字典dict也叫映射mapping,字典由任意个元素组成,每个元素叫item或entry。每个item是由(key-value)键值对组成的二元组

可变性:可根据key对元素进行定位并修改元素的value值
无序性:字典是无序的,在Python3.6.x之后,字典会根据录入顺序来显示,但这并不代表字典是有序的
key唯一性:字典存储时会对key进行hash计算,相同的key只会计算成同一个值,因此字典中是不可能允许相同key同时存在的


字典初始化
dict()  ##要使用关键字dict来初始化
dict(**kwarg)  #直接使用key=value的方式赋值,**kwargs表示的是若干个key=value
dict(iterable,**kwarg) #使用可迭代对象和key=value来生成,可迭代对象中的元素必须是一个二元结构
dict(mapping,**kwarg) #使用映射(另一个字典)和key=value来生成
>>> d1={}  #这是字典专用的初始化格式,集合虽然也是以大括号包围,但是不能这样初始化
>>> d2=dict(name='xiejiawen',age=25,sex='male')
>>> d3=dict([('a',2),('b',3)],fundation='hangzhou',country='China')
>>> d4=dict(d2,profession='cs')
>>> print(d1)
>>> print(d2)
>>> print(d3)
>>> print(d4)
{}
{'name': 'xiejiawen', 'age': 25, 'sex': 'male'}
{'a': 2, 'b': 3, 'fundation': 'hangzhou', 'country': 'China'}
{'name': 'xiejiawen', 'age': 25, 'sex': 'male', 'profession': 'cs'}

也可以完全使用key:value的方式来初始化,不过key必须是可hash的

>>> d6={'name':'xiejiawen','name2':'111'}  #此处没有使用dict关键字,并且括号是{}
>>> print(type(d6),d6)                   #key如果是字符串,需要使用引号包围,

fromkeys方法

#dict.fromkeys(iterable,value) 
>>> a=dict.fromkeys(range(10),0) #key为range(10)中的序列,0是给定的默认值
>>> print(a)  
{0: 0, 1: 0, 2: 0, 3: 0, 4: 0} #如果不给定默认值,那么value就是None
查询
d[key] #返回key对应的value,不存在则报KeyError
get(key[,default]) #返回key对应的value,不存在返回default,没设置默认值则返回None
setdefault(key[,default]) #返回key对应的value(注意不是修改),如果key不存在则添加键值对,value设置为default,没有default就设置为None
>>> d3={'a': 2, 'b': 3, 'fundation': 'hangzhou', 'country': 'China'}
>>> d3['country']
'China'   #这个China是返回的,不是输出的
>>> d3.get('a',999)
2 #返回值
>>> d3.setdefault('b',987)
3 #返回值
>>> d3.setdefault('c',996)
996 #返回值
>>> print(d3)
{'a': 2, 'b': 3, 'fundation': 'hangzhou', 'country': 'China', 'c': 996} #新加了一个键值对
更新update
dict1.update(dict2) 将dict2中的数据加到dict1中
dict1 = {'name': 'tom', 'age': '18'}
dict2 = {'sex': 'male'}
# 如果dict2中有些item和dict1中完全一样,那就保留一个item,其他的内容增量添加
dict1.update(dict2)
print(dict1)
{'name': 'tom', 'age': '18', 'sex': 'male'} #注意不是追加,因为字典是没有顺序的
修改
d[key]=value #将key对应的值修改为value,key不存在则添加新的kv对
update([other]) --> None #使用kv对来更新本字典,本字典存在此key的就覆盖本地,key不存在的就添加kv对
>>> d3={'a': 2, 'b': 3, 'fundation': 'hangzhou', 'country': 'China'}
>>> d3['a']=97
>>> d3.update(b=98,c=99)
>>> print(d3)
{'a': 97, 'b': 98, 'fundation': 'hangzhou', 'country': 'China', 'c': 99}

>>> d3.update({'a':2})
>>> print(d3)
{'a': 2, 'b': 98, 'fundation': 'hangzhou', 'country': 'China', 'c': 99}
删除
pop(key[,default])  #移除key对应的键值对,key不存在返回default值;没默认值并且key也不存在就会报KeyError
popitem()  #移除任意一个item并返回,如果字典为空报KeyError
clear() #清空字典
>>> d6={'name': 'xiejiawen', 'name2': '111'}
>>> d6.pop('name','zhangsan')
'xiejiawen'
>>> d6.popitem()
('name2', '111')
遍历

遍历key

#这两个是等价的
for i in d:
	print(i)

for k in d.keys():  ##key返回的是一个类集合,因为key都是可以hash的
	print(k)

遍历value

#这些方式都可以遍历value
for i in d.values():
	print(i)

for j in d.keys():
	print(d[j])
	#print(d.get(j))

遍历item

for i in d.items():
	print(i)
	print(i[0],i[1])

for k,v in d.items():
	print(k,v)

for k,_ in d.items():
	print(k)

for _,v in d.items():
	print(v)
遍历与删除

使用key,values,items方法遍历字典的时候,不可以改变字典的长度

d=dict(a=1,b=2,c=3)
for k,v in d.items():  
	print(d.pop(k))  ##这样就是错误的操作

可以这样操作

for i in len(d): #只要长度不为0就可以继续遍历
	print(d.popitem())

for j in d:
	print(d.popitem())

也可以使用列表来装载key,然后在根据列表中的kye来删除

# for 循环正确删除
d = dict(a=1, b=2, c=3)
keys = []
for k,v in d.items():
    keys.append(k)
for k in keys:
    d.pop(k)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值