字典
- 字典由key和value组成
- 字典的key必须是不可变对象
- 字典的key唯一 之后再写同名key会覆盖前面
- 字典是无序可变得序列
- {} dict() 都表示空字典
- 字典通过key获取value值
字典的查
1
根据键查找值 找不到报错
dict[key]
books = {
"book_Name1":"百年孤独",
"book_Name2":"老人与海",
"book_Name3":"六里庄遗事",
"book_Name4":"一个人的村庄",
"book_Name5":"简爱",
}
b = books["book_Name3"]
print(b) 结果"六里庄遗事"
b = books["book_Name8"]
print(b) 找不到报错
2
同样是根据键查找,但是找不到返回缺省值
.get()
b = books.get("book_Name2","快乐")
print(b) 结果为 老人于海 找的到返回对应值
b = books.get("book_Name7","我是快乐的")
print(b) 返回我是快乐的 即找不到的时候返回后面你设置的缺省值默认是None
字典的删除
1
books = {
"book_Name1":"百年孤独",
"book_Name2":"老人与海",
"book_Name3":"六里庄遗事",
"book_Name4":"一个人的村庄",
"book_Name5":"简爱",
}
1
按key删除 返回删除的值
.pop()
print(books.pop("book_Name1")) 返回 删除键值对的值 即百年孤独
print(books) 返回{'book_Name2': '老人与海', 'book_Name3': '六里庄遗事', 'book_Name4': '一个人的村庄', 'book_Name5': '简爱'}
2
按键删除什么都不返回
del books[key]
print(books)
del books["book_Name1"] 干掉了book_Name1
print(books)
3
清空字典慎用
.clear()
books.clear()
print(books) 字典变成空字典了
字典的增
books = {
"book_Name1":"百年孤独",
"book_Name2":"老人与海",
}
books1={
"book_Name3":"六里庄遗事",
"book_Name4":"一个人的村庄",
"book_Name5":"简爱",
}
1
将一个字典中的键值对添加到另外一个字典中
.update(dict)
主 被添加的对象
books.update(books1)
print(books) 结果为 两个字典的键值对都有
print(books1) 结果 不变
2
通过给键赋值来创建字典(前提是键不在字典中不然会覆盖)
books["books9"] = "刺猬的优雅"
print(books) 因为字典中没有这个键所以添加进{'book_Name1': '百年孤独', 'book_Name2': '老人与海', 'books9': '刺猬的优雅'}
遍历字典
books1={
"book_Name3":"六里庄遗事",
"book_Name4":"一个人的村庄",
"book_Name5":"简爱",
}
1
通过键遍历
.keys()可以返回键的可迭代对象
a = books1.keys()
a = list(a)
print(a) 结果 ['book_Name3', 'book_Name4', 'book_Name5']
拿到列表直接for in 遍历做他
2
通过遍历值直接拿到值的可迭代对象
.values
a = books1.values()
print(a)
a = list(a)
print(a)['六里庄遗事', '一个人的村庄', '简爱']
3
key和value一起拿
.items()
a = books1.items()
a = list(a)
print(a)[('book_Name3', '六里庄遗事'), ('book_Name4', '一个人的村庄'), ('book_Name5', '简爱')]
可以通过成员方法in判断key在不在字典中
Zip函数
zip用于把多个可迭代对象组合起来对应元素组和对象个数不一致的时候以短为主
zip函数一般用于快速构建字典
list1 = ["王语嫣","鱼玄机","黄烨幸","刘十九",]
tuple1 = ("天龙八部","雪中悍刀行","暇木","白居易")
a = zip(list1,tuple1)
#a是一个内存地址 无法直接查看可以转列表看到
b = dict(a)
print(b){'王语嫣': '天龙八部', '鱼玄机': '雪中悍刀行', '黄烨幸': '暇木', '刘十九': '白居易'}
字典推导式
res = {key:value for key,value in zip(
["王语嫣","鱼玄机","黄烨幸","刘十九",],
("天龙八部","雪中悍刀行","暇木","白居易"))
}
print(res) {'王语嫣': '天龙八部', '鱼玄机': '雪中悍刀行', '黄烨幸': '暇木', '刘十九': '白居易'}
会发现和上面一样
问题1快速颠倒字典的键值
实现
快速颠倒字典的键值
d1 = {"name":"tom","age":20}
推导式过程
print({value:key for key,value in d1.items()})
结果为{'tom': 'name', 20: 'age'}
非推导式过程
d2 = {}
for key in d1:
d2[d1[key]]=key
print(d2)
获取每个字符在字符串中出现的次数
s1 = "insdd....."
推导式过程
res = {ch:s1.count(ch) for ch in set(s1)}
print(res)
非推导式过程
d2 = {}
for key in s1:
d2[key] = s1.count(key)
print(d2)