字典
数据类型的分类
- 可变(不可哈希)的:list dict set
- 不可变(可哈希)的:str bool int tuple
字典:
- {}括起来,以键值对形式存储的容器型数据类型:
- 键必须唯一,且是不可变的数据类型:str bool int tuple
- 值可以是任意数据类型,对象
- 查询速度非常快,以空间换时间。
1.字典的创建方式
#方法一:
d1 = dict(((‘地址‘,‘上海‘),("年龄",20),(1,2019))) #看清楚这里有几层括号
print(d1)
{‘地址‘: ‘上海‘, ‘年龄‘: 20, 1: 2019}
#方法二:
d2 = dict(地址 = "上海",年龄 = 20) #注意:键不加双引号
print(d2)
{‘地址‘: ‘上海‘, ‘年龄‘: 20}
d3 = dict({‘地址‘:"上海","年龄":20,1:2019})
print(d3)
d4 = {‘地址‘:"上海","年龄":20,1:2019}
print(d4)
{‘地址‘: ‘上海‘, ‘年龄‘: 20, 1: 2019}
{‘地址‘: ‘上海‘, ‘年龄‘: 20, 1: 2019}
2.增
-
直接增加 --有则改之,无则增加
-
setdefault --有则不变,无则增加
#直接增加 d = dict(name = "Faye",age = 20, hobby = "travel") d["sex"] = "女" print(d) d["name"] = "Python" #由于键是唯一的,如果有两个重复的键,后面的键会覆盖前面的 print(d)
{‘name‘: ‘Faye‘, ‘age‘: 20, ‘hobby‘: ‘travel‘, ‘sex‘: ‘女‘} {‘name‘: ‘Python‘, ‘age‘: 20, ‘hobby‘: ‘travel‘, ‘sex‘: ‘女‘}
#setdefault d = dict(name = "Faye",age = 20) d.setdefault("hobby") print(d) d.setdefault("sex","女") print(d) d.setdefault("age",99) #如果字典里有,则不变 print(d)
3.删
-
pop() --可设置第二个参数,那么无论字典中有无此键都不会报错(比较常用)
-
clear() --清空字典内容
-
del()
d = dict(name = "Faye",age = 20, hobby = "travel") print(d.pop("name")) #删除并返回 print(d.pop("name","没有此键")) #如果列表里没有要删除的元素,则返回“没有此键”
Faye 没有此键
4.改
- 直接改
5.查
- 按键查 --没有键的话会报错
- get() --没有键会返回None,或者设置自己的话
- 三个特殊的:keys() 、values() 、items()
#直接查
d = {"name":"Faye","age":20,"hobby":["旅游","健身","看电影"]}
print(d["hobby"])
#print(d["sex"]) #由于字典中没有这个键,所以会报错
[‘旅游‘, ‘健身‘, ‘看电影‘]
#get()方法查询
d = {"name":"Faye","age":20,"hobby":["旅游","健身","看电影"]}
print(d.get("hobby"))
print(d.get("sex")) #查不到默认返回None
print(d.get("place","查不到哦~")) #第二个参数可以设置查不到返回的字符
[‘旅游‘, ‘健身‘, ‘看电影‘]
None
查不到哦~
#keys() --查询所有的键
d = {"name":"Faye","age":20,"hobby":["旅游","健身","看电影"]}
a = d.keys()
print(a)
print(type(a)) #是一个特殊的类型
b = list(a) #但是可以转化成列表
print(b)
print("------------------")
for k in d.keys():
print(k)
dict_keys([‘name‘, ‘age‘, ‘hobby‘])
<class ‘dict_keys‘>
[‘name‘, ‘age‘, ‘hobby‘]
------------------
name
age
hobby
#values() --查询所有的值
d = {"name":"Faye","age":20,"hobby":["旅游","健身","看电影"]}
a = d.values()
print(a)
print(type(a)) #是一个特殊的类型
b = list(a) #但是可以转化成列表
print(b)
print("------------------")
for v in d.values():
print(v)
dict_values([‘Faye‘, 20, [‘旅游‘, ‘健身‘, ‘看电影‘]])
<class ‘dict_values‘>
[‘Faye‘, 20, [‘旅游‘, ‘健身‘, ‘看电影‘]]
------------------
Faye
20
[‘旅游‘, ‘健身‘, ‘看电影‘]
#items()
d = {"name":"Faye","age":20,"hobby":["旅游","健身","看电影"]}
print(d.items())
print(list(d.items()))
print("----------一般这么用----------")
for i in d.items():
print(i)
print("---------a是所有的键-----------")
for a,b in d.items():
print(a)
print("---------b是所有的值-----------")
for a,b in d.items():
print(b)
print("---------元祖的拆包-----------")
for a,b in d.items():
print(a,b)
dict_items([(‘name‘, ‘Faye‘), (‘age‘, 20), (‘hobby‘, [‘旅游‘, ‘健身‘, ‘看电影‘])])
[(‘name‘, ‘Faye‘), (‘age‘, 20), (‘hobby‘, [‘旅游‘, ‘健身‘, ‘看电影‘])]
----------一般这么用----------
(‘name‘, ‘Faye‘)
(‘age‘, 20)
(‘hobby‘, [‘旅游‘, ‘健身‘, ‘看电影‘])
---------a是所有的键-----------
name
age
hobby
---------b是所有的值-----------
Faye
20
[‘旅游‘, ‘健身‘, ‘看电影‘]
---------元祖的拆包-----------
name Faye
age 20
hobby [‘旅游‘, ‘健身‘, ‘看电影‘]
练习题
d = {"name":"Faye","age":20,"place":[{"国家":"中国","城市":"上海"}],"description":{"性格":"内向","优点":"无","缺点":"记性差"}}
#1.获取{"国家":"中国","城市":"上海"}这个字典
#2.获取所在国家
#3.获取缺点
答案
d = {"name":"Faye","age":20,"place":[{"国家":"中国","城市":"上海"}],"description":{"性格":"内向","优点":"无","缺点":"记性差"}}
#1.获取{"国家":"中国","城市":"上海"}这个字典
print(d["place"][0])
#2.获取所在国家
print(d["place"][0]["国家"])
#3.获取缺点
print(d["description"]["缺点"])
{‘国家‘: ‘中国‘, ‘城市‘: ‘上海‘}
中国
记性差