【学习资料】 - Python3基础之字典详解

Python3基础之字典详解

上一篇讲了列表的一些基本操作与方法,这里再简单讲下字典Dict的方法。

相对于列表,字典的一个元素是由键值对组成K:V,所以字典的索引方式查找与列表略有不同,字典是以键为索引值去查找。

字典的格式如下:

dict = {key1 : value1, key2 : value2, ... }

其中里面的key是唯一性的,value是可以重复的。字典一般用于记录身份信息,表结构获取(表字段也是唯一性的,相当于字典的key)等地方。

扩展:json的格式跟字典格式一样,但json是str类型。

字典推导式

同样先来扩展下字典推导式,相对于列表推导式,字典推导式用的比较少。

字典中的键值互换

dic = {"A":"a","B":"b","C":"c"}

dic = {v:k for k,v in dic.items()}  # 从返回单元素x,变为键值对形式k:v

print(dic)

image.png

 

快速组合字典    

keylist = ["a","b","c","d"]

valuelist = ["python","java","C++","R"]

dic = {k:v for k,v in zip(keylist,valuelist)}  # zip函数把两列表按顺序返回一个有元组对的新列表

print(dic)

image.png

 

字典索引

我i们来回忆下列表的索引查找

lst = [1,2,3,4,5,6]

用lst[index]方式去查找里面的某个值。但字典不同,由于字典是键值对,所以没有明确的index对应的元素,只有键和值,下面我们一起看看字典的类索引方式查找。
      dic = {"name":"mike","age":18,"address":"shanghai"}

print(dic["name"])

print(type(dic["name"]))

image.png

通过键的索引找到了对应的值,如果是二维字典,只是多加了一步遍历循环就能批量跑出所有name对应的值。

该索引方法差不多能解决80%的字典查找问题,因为一般键在表结构确认后就是固定的了。

其实字典有专门有一个通过键去查找值的方法,那就是get()方法。

字典方法

get()方法

跟字典索引一样,通过键去找出值。

语法格式如下:

dict.get(key)

举例:

dic = {"name":"mike","age":18,"address":"shanghai"}

print(dic["name"])

print(type(dic["name"]))

print(dic.get('name'))

print(type(dic.get('name')))

image.png

假设读者不知道某个字典中到底有没有这个键,我们可以给这个假想的键赋一个假想的值,如下:

dic = {"name":"mike","age":18,"address":"shanghai"}

print(dic.get('work'))  # 键不存在

print(type(dic.get('work')))

print(dic.get('work',"IT"))  # 给不存在的键赋值

image.png

可以看到如果查找的键不存在,通过get方法不会出现报错,只返回None,而如果用字典索引的方式查找不存在的键,那就会报错:

print(dic["work"])

image.png

 

setdefault()方法

与get()方法类似,如果键不存在,则返回设定值,但区别在于setdefault方法会把该不存在的键添加到字典中。

dic = {"name":"mike","age":18,"address":"shanghai"}

print(dic.setdefault('work',"IT"))

print(dic)

image.png

 

has_key()方法

为了防止上述的一些不必要的报错,第一种方法是可以先判断下键是否存在,就要用到has_key()方法,返回True/false的bool类型,方式等同in。

if dic.has_key("work"):  # if "work" in dic:

print(dic["work"])

 

keys()方法/values()方法

第二种方法先列出字典所有的key,使用keys()方法,返回list类型。

print(dic.keys())

print(dic.values())  # 返回所有的值,是迭代器

 

items()方法

有些时候,我们就是要取出键值对来进行分析,则可以使用items()方法,返回list类型,且里面的元素是tuple类型。

print(dic.items())

image.png

是迭代器,所有需要通过遍历来取出里面的键值组合。

for k,v in dic.items():

print("key is ",k)

print("value is ",v)

image.png

 

上述方法就是关于字典查找的一些常用方法。

字典添加

在python中, 如果需要在字典中新增键值对元素,可以直接用赋值方式添加。

dic = {"name":"mike","age":18,"address":"shanghai"}

dic["work"] = "IT"

print(dic)

image.png

如果键是存在的,则update值

dic["name":"python"]

print(dic)

image.png

 

update()方法

把字典2号的键值对添加到字典1号中,使用update()方法实现。

dic1 = {"name":"mike","age":18,"address":"shanghai"}

dic2 = {"name":"mike","work":"IT","sex":"male"}

dic1.update(dic2)

print(dic1)

image.png

重复的数据不会添加进来,保持字典键的唯一性。

 

字典删除

与列表一样的方法,pop(),clear(),del方法,这里就简单说下。

删除一个键值对:

del dic["age"]

dic.pop("age") # 返回删除键对应的值

删除整个字典:

dic.clear()

del dic

还有一个删除方法:popitem(),删除末尾的一个键值对,没有参数,返回删除的键值对。

dic.popitem()

image.png

 

字典复制

copy()方法

复制一个字典,返回一个浅复制字典对象

newdic = dic.copy()

print(newdic)

image.png

 

fromkeys()方法

该方法是独立创建一个新字典,提供键列表,值可选(不加默认返回值为None)
lst = ["a","b","c","d"]

dic = dic.fromkeys(lst)

print(dic)

image.png

dic = dic.fromkeys(lst,"python")

print(dic)

image.png

有没有感觉像是表内新增一行数据,表字段对应的值都为None。

 

上述就是python字典的一些常用操作手法,字典在python中比较常用,应该说键值对方式存取在编程中是很常见的,redis数据库就是一个键值对存取方式的非关系型内存存取数据库。

posted @ 2020-02-20 15:27  影子的影  阅读(303)  评论(0)    收藏  举报