欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python基础 ---字典dict

程序员文章站 2022-07-15 07:59:04
...


字典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} #新加了一个键值对

修改

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)
相关标签: python基础 python