马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 15271953841 于 2024-2-25 06:53 编辑
Python 3.12.1 (tags/v3.12.1:2305ca5, Dec 7 2023, 22:03:25) [MSC v.1937 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
d=dict.fromkeys("FishC") (生成一个字典)
d
{'F': None, 'i': None, 's': None, 'h': None, 'C': None}
d["s"]=115 (类似于序列的操作,只需要指定一个存在于字典中的键,就可以修改其对应的值)
d
{'F': None, 'i': None, 's': 115, 'h': None, 'C': None}
d.update({"i":105,"h":104}) (同时修改多个键值对)
d
{'F': None, 'i': 105, 's': 115, 'h': 104, 'C': None}
d.update(F=70,C=67) (也可以这样写,但注意:键不要加引号)
d
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}
查找
d["C"]
67
d["c"]
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
d["c"]
KeyError: 'c'
d.get("c","这里没有小c")
'这里没有小c'
d.setdefault("C","code") (查找一个键是否存在于字典中,如果在,返回对应的值)
67
d.setdefault("c","code") (如果不在,则给它指定一个新的值,感觉类似于增加一个新的键值对)
'code'
d
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67, 'c': 'code'}
Items() , keys() ,values() 三个方法分别用于获取字典的键值对,键,值的视图对象。
什么是视图对象?
视图对象即字典的动态视图,这就意味着当字典的内容发生改变的时候,视图对象的内容也会相应地跟着改变。(我个人理解就是通过上述三种方法获得键值对、键、值三者的内容叫视图对象)
keys=d.keys()
values=d.values()
items=d.items()
items
dict_items([('F', 70), ('i', 105), ('s', 115), ('h', 104), ('C', 67), ('c', 'code')])
keys
dict_keys(['F', 'i', 's', 'h', 'C', 'c'])
values
dict_values([70, 105, 115, 104, 67, 'code'])
d.pop("C") (我个人误删了键”C”)
67
d.pop("c")
'code'
d["C"]=67 (把刚刚误删的键“C“和的值,增加到字典d中)
d
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}
items
dict_items([('F', 70), ('i', 105), ('s', 115), ('h', 104), ('C', 67)])
keys
dict_keys(['F', 'i', 's', 'h', 'C'])
values
dict_values([70, 105, 115, 104, 67])
浅拷贝
e=d.copy()
e
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}
len(d) (获取键值对的数量)
5
"C" in d (判断某个键是否存在于字典中)
True
"c" not in d
True
list(d) (字典转换成列表)
['F', 'i', 's', 'h', 'C']
list(d.values()) (获取所有的值)
[70, 105, 115, 104, 67]
e=iter(d) (iter()函数将字典的键构成一个迭代器)
next(e)
'F'
next(e)
'i'
next(e)
's'
next(e)
'h'
next(e)
'C'
next(e) (迭代器只能走一遍,走到最后就会出现异常)
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
next(e)
StopIteration
从前字典是无序的,它实现的逻辑是映射,而非排序,后来Python作者也给字典拍了一个序,在Python3.8之后的版本,可以使用reversed()对字典内部的键值对逆向操作。在之前的版本,Python因为它的字典顺序是得不到保障的,所以我们不能使用这个reversed()的方法,因为无序,就无所谓的逆向排序。有网友说3.7版本可以这样,list(reversed(list(d.values())),但我没试过。因为我没有3.7版本。
list(reversed(d.values()))
[67, 104, 115, 105, 70]
嵌套
d={"吕布":{"语文":60,"数学":70,"英语":80},"关羽":{"语文":80,"数学":90,"英语":70}}
d
{'吕布': {'语文': 60, '数学': 70, '英语': 80}, '关羽': {'语文': 80, '数学': 90, '英语': 70}}
d["吕布"]["数学"]
70
d={"吕布":[60,70,80],"关羽":[80,90,70]}
d["吕布"][1]
70
高阶的字典推导式
d={'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}
b={v:k for k,v in d.items()}
b
{70: 'F', 105: 'i', 115: 's', 104: 'h', 67: 'C'}
c={v:k for k,v in d.items() if v>100}
c
{105: 'i', 115: 's', 104: 'h'}
d={x rd(x) for x in "FishC"} (ord()是获取对应编码值)
d
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}
初学者很容易迷惑的:
d={x:y for x in [1,3,5] for y in [2,4,6]}
d
{1: 6, 3: 6, 5: 6}
因为后面for是个嵌套,相当于依次传入1:2,1:4,1:6,后面的1:6覆盖了前面的1:2,1:4,因为字典中的键不会重复的,重复了它就会用新的值去覆盖旧的值。
|