Python字典基础知识

今天更新字典的基础知识,作为笔记供复习使用,还是代码+注释的形式,在注释方面,我尽量做到更加详细,能够作为每个知识点的引言,让每个知识点的出现不是突然的,而是有缘由的,如有不足,希望讨论补充~
'''
    怎么创建一个字典?考虑下面的基础方法:
'''
x = {"吕布":"口口布", "关羽":"关习习"}

#*  通过大括号,元素:元素,的方式建立一个字典
#*  冒号左边是键,冒号右边是值,因此冒号,冒号左右的内容统称为一个键值对,
#*  键和值是一一映射关系
#*  我们可以通过type函数查看字典类型
print(type(x))

#?那么如何找到字典中指定键的值呢?可以通过方括号加键的方式索引之
print(x["关羽"],x["吕布"])

#*  可以通过方括号索引进行值的修改,当然,如果指定的键在字典中不存在,
#*  那么将会在字典中插入这个新的键值对
x["刘备"] = "刘又田"
print(x)

#TODO   下面是六种创建字典的方式
#TODO   大括号冒号类
a = {"吕布":"口口布", "关羽":"关习习"}  
#TODO   用dict函数创建一个字典,参数分别指定键与值,用等号配对
b = dict(吕布="口口布", 关羽="关习习", 刘备="刘又田")   
#TODO   dict参数是一个列表,列表内的键值对以元组的方式表示,逗号配对键与值
c = dict([("吕布", "口口布"), ("关羽", "关习习"), ("刘备", "刘又田")])
#TODO   用将第一种方法作为dict函数的参数,有点鸡肋
d = dict({"吕布":"口口布", "关羽":"关习习"})
#TODO   在dict函数内也可以混合使用多种方法,如同时使用大括号冒号类与等号配对类
e = dict({"吕布":"口口布", "关羽":"关习习"}, 刘备="刘又田")
#TODO   用zip函数作为dict函数的参数,zip的参数是两个列表,第一个列表是键的内容,第二个列表是值
f = dict(zip(["吕布", "关羽", "刘备"], ["口口布", "关习习", "刘又田"]))
#*  我们发现这六种方法等价
print(a == b == c == e == d == f)

#TODO   可以使用dict.fromkeys()方法初始化,fromkeys接收两个参数,
#TODO   第一个参数是一个可迭代对象,比如字符串,列表,元组,可迭代对象的每一个元素作为字典的键
#TODO   第二个参数是初始化的值,将字典中的键都赋以相同的指定的值
d = dict.fromkeys("Study", 250)
print(d)

#*前面说了,可以修改字典中的值
d['S'] = 70
print(d)
d['u'] = 67
print(d)

#TODO   可以用.pop()方法进行字典指定键值对的删除,.pop()返回指定键的值,
#TODO   如下面的打印,将pop方法返回的那个删除键的值打印出来
print(d.pop('d'))
d.pop('S')
print(d)
#!  d.pop("狗")是不被允许的,这会抛出异常,那么如果不想抛出异常,可以设置default的值
#!  比如:d.pop("狗", "没有")

#*  在python3.7之前,字典是无序的,因此popitem()方法将字典中随机的键值对删除
#*  但是python3.7之后,字典是有序的,因此popitem()方法默认将字典中最后一次输入的
#*  键值对删除,下面来演示这个方法
d.popitem()
print(d)

#TODO   回顾一下,del关键字可以将指定内容删除,它同样可以删除指定键值对,甚至是字典
d = dict.fromkeys("Study", 250)
del d['y']
print(d)
del d
#!  这时,如果print(d)则会抛出异常,因为此时d字典已经被清除,
#!  如果只想清除字典中的全部元素,可以考虑下面的方法
d = dict.fromkeys("Study", 250)
d.clear()
print(d)

d = dict.fromkeys("Study")
print(d)
d['S'] = 115
print(d)
d.update({'t':105, 'u':104})
d.update(d='70', y='67')
print(d)
#TODO   如果想要修改键的值,可以考虑索引方法和update函数

#TODO   想要查找键中的值,可以直接索引寻找
d = dict.fromkeys("I love Sudy")
d["S"] = 250
print(d["S"])

#*  但是当没有该键时,会报异常,可以考虑get函数,它的第一个参数是寻找的键,
#*  第二个参数是找不到该键时返回的字符串,参照下面的使用例子
print(d.get("t", "这里没有t"))

#TODO   如果想在字典中找指定的键,而找到则返回键对应的值,找不到则新建该键,
#TODO   然后把第二个参数default的值作为新键的值,同时返回该新建值,参考下面的使用例子
d.setdefault("t", "220")
print(d["t"])
print(d.setdefault("M", "9"))

#TODO   我们可以设置眼睛,来监视字典中的情况,这就是视图对象
#TODO   items方法可以返回字典中的键值对的视图对象,keys方法可以返回字典中的键的视图对象
#TODO   values方法可以返回字典中值的视图对象,参考下面的使用例子
keys = d.keys()
values = d.values()
items = d.items()
print(items, keys, values)

#*  字典也可以浅拷贝,可以使用copy函数
e = d.copy()
print(e)

#?  有时候我们想知道这本字典有多少个单词,那么可以考虑使用len函数,
#*  len函数返回字典中键值对的个数,考虑下面的使用例子
print(len(d))

#?  我们想要知道某个键值对是不是在字典中,就像我们想要知道某个单词和他的注释是否在字典中一样
#*  我们可以考虑使用in 和not in 关键字,in 和 not in 关键字判断键是否在字典中,
#*  在则返回True, 不在则返回False,当然,如果键都不在字典中了,值当然也就不存在了
#*  键和值是同步捆绑的,考虑下面的使用例子
print("u" in d)
print("Q" not in d)
print("t" not in d)

#?  通常我们想抽出字典中所有的键,或者抽取出字典中所有的值,我们怎么做?
#?  list函数将迭代器转化为列表,如果将list函数作用于字典会怎么样?
#*  list(d)相当于list(d.keys()),它将字典中的键形成一个列表,
#*  当然,如果想把值抽取出来形成一个列表,可以考虑list(d.values())
#*  考虑下面的使用例子
print(list(d.keys()))
print(list(d))
print(list(d.values()))

#?  如果我们想一个个抽取出字典中的键呢?
#*  回顾一下iter函数,它将得到序列的迭代器,它也可以作用于字典,
#*  iter函数作用于字典,将得到字典所有键的迭代器,
#*  然后就可以用next函数抽取迭代器中的一个个键了,考虑下面的使用例子
e = iter(d)
print(next(e))
print(next(e))
print(next(e))
print(next(e))

#*  之前我们提到,字典在python3.7之前是无序的,但是现在我们的字典是有序的了,
#*  既然字典有序,那么我们就可以使用sorted和reversed函数对其进行排序
d = dict.fromkeys("I love Study", 260)
d["S"] = 110
d["I"] = 90
d[" "] = 20
d["o"] = 1000
print(list(reversed(d.values())))
print(sorted(d.values()))
print(sorted(d.values(), reverse=True))

#*  字典的值可以嵌套的,可以嵌套字典,可以嵌套序列
d = {"吕布":{"语文":60, "数学":70, "英语":90}, "关羽":{"语文":80, "数学":90, "英语":70}}
print(d)    #TODO   print字典名,则打印整个字典,无论嵌套,这没什么问题
print(d["吕布"]["数学"])    #TODO   当字典是嵌套字典时,索引字典中的值通常是:字典.[键][键]的形式
d = {"吕布":[60, 70, 80], "关羽":[80, 90, 70]}  #*  值可以是列表,也可以是字符串,元组
print(d["吕布"][1]) #*  这时候的索引,通常是:字典.[键][下标]的形式
print(d["关羽"][2])

希望我的笔记可以帮助到你,祝你学习快乐~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值