字典是另一种可变容器模型,且可存储任意类型对象。
字典中的元素由键和值两部分构成,冒号前面的称为键,后面称为值,合在一起叫键值对
字典的创建
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中
注意:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict。
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
# 字面量语法
student = {
'id': 1001,
'name': '张三',
'sex': True,
'birthday': '1995-03'
}
# 构造器函数
student2 = dict(id=1002, name='王大催', sex=True, birthday='1992-11')
# 生成式(推导式)语法
dict1 = {i: i ** 2 for i in range(1, 10)}
print(dict1) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
# 生成器 (不是元组)
gen_obj = (i for i in range(1, 10))
print(next(gen_obj)) # 1
print(next(gen_obj)) # 2
print(next(gen_obj)) # 3
字典的使用
student = {
'id': 1001,
'name': '张三',
'sex': True,
'birthday': '1995-03'
}
# 字典的长度
print(len(student)) # 4
# 遍历字典中的键(下面两种写法效果一样)
# for key in student:
for key in student.keys():
print(key, student[key])
# values的方法遍历字典中的值
for value in student.values():
print(value)
# items的方法遍历字典中的键值对(二元组)
for x in student.items():
print(x) # ('id', 1001)
# 也可以把键和值分别取出
for key, value in student.items():
print(key, value) # id 1001
字典的运算
student = {
'id': 1001,
'name': '张三',
'sex': True,
'birthday': '1995-03'
}
# 字典的索引运算放在赋值运算符的左边
# 如果索引对应的键是存在的,就更新它的值
student['name'] = '王美丽'
student['sex'] = False
# 如果字典中没有对应的索引,就新增一组新的键值对
student['address'] = '四川成都'
print(student) # {'id': 1001, 'name': '王美丽', 'sex': False, 'birthday': '1995-03', 'address': '四川成都'}
print('name' in student) # True
print('age' in student) # False
print('address' in student) # True
print(student['name']) # 王美丽
print(student['birthday']) # 1995-03
# 如果要使用下标(索引)运算,那么必须要保证键一定存在,否则会报错
print(student['age'])
# 如果不确定,可以先用if判断
if 'age' in student:
print(student['age'])
# 使用get函数通过key获取value时,如果key不存在,不会发生KeyError的错误
# 而是得到一个None(空值)或者是你指定的默认值
print(student.get('age')) # None
print(student.get('age', 20)) # 20
# 删除键值对
del student['name'] # 没有返回值
student.pop('name') # 会返回删除的值
字典的相关操作
dict1 = {'A':100, 'B': 200, 'C': 300}
dict2 = {'D': 400, 'E': 500, 'A': 600}
# 更新()元素的合并或更新
dict1.update(dict2)
print(dict1) # {'A': 600, 'B': 200, 'C': 300, 'D': 400, 'E': 500}
# 删除 --->键必须存在,如果不存在会产生KeyError
del dict1['B']
dict1.pop('K')
# 默认删除最后一项
dict1.popitem()
# 清空所有
dict1.clear()
# 如果键在字典中,就返回字典中键对应的值,如果键不在字典中,就加入新的键值对(只新增不更新)
dict1.setdefault('C',200)
dict1.setdefault('name','1111')
联网获取JSON格式的数据并解析出需要的内容
操作系统:Windows, iOS, Android, macOS, Linux, Unix
编程语言:Python, Java, PHP, Go, C++
- 两个异构的系统之间交换数据最好的选择是交换纯文本(可以屏蔽系统和编程语言的差异)
- 纯文本应该是结构化或半结构化的纯文本(有一定的格式)
- XML ---> eXtensible Markup Language ---> 可扩展标记语言
- JSON ---> JavaScript Object Notation ---> 大多数网站和数据接口服务使用的数据格式
- YAML ---> Yet Another Markup Language
- 如何将JSON格式转为Python程序中的字典?
- ---> json --->loads
- URL ---> Universal Resource Locator ---> 统一资源定位符
- 三方库 ---> request ---> pip install requests
协议 ---> 通信双方需要遵守的会话的规则
HTTP / HTTPS --->通过URL访问网络资源的协议
请求(request) - 响应(response)
import json
import requests
# 获取网络资源 ---> 两种书写方式
resp = requests.get('http://123?key=djdjdjd&num=2')
resp = requests.get(
url='',
params={'key':'','num':''}
)
# 两种方法都可以把json格式的数据转为Python中的字典
dict1 = json.load(resp.text)
dict2 = resp.json()