Python—第10天—字典
字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中。
元素由键和值两部分构成,冒号前面的称为键,冒号后面为值,合在一起叫键值对。
键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
创建字典
student = {
'id': 1234,
'name': '张三',
'sex': '男',
'weight': '100',
'birthday': '2021-7',
'address': '四川成都',
'favorites': ['学习', '游戏'],
'contacts': {
'QQ': '123456',
'tel': '987654321',
'email': '123@456.com'
}
}
print(student['name'])
print(student['birthday'])
print(student['contacts']['tel'])
for fav in student['favorites']:
print(fav)
字面量语法
student1 = {
'id': 101,
'name': 'abc',
'sex': True
}
print(student1)
print(len(student1))
# for key in student1:
for key in student1.keys():
print(key, student1[key])
print('-' * 20)
print(student1.values())
print('-' * 20)
for key, value in student1.items():
print(key, value)
print('-' * 20)
构造器函数
student2 = dict(id=102, name='zxc', sex=True)
print(student2)
生成式(推导式)
dict1 = {i: i ** 2 for i in range(1, 10)}
print(dict1)
字典的运算
student = dict(id=102, name='zxc', sex=True, birthday='1998')
# 字典的索引运算放在赋值运算符的左边
# 如果索引对应的键是存在的,就更新它的值
student['name'] = 'asd'
student['sex'] = False
# 如果字典中没有对应的索引,就增加一组新的"键值对"
student['address'] = '四川成都'
print(student)
#成员运算
print('name' in student)
print('age' in student)
print('address' in student)
# 使用get函数通过key获取value时,如果key不存在,不会发生keyError错误
# 而是得到一份None(空值),或者是你指定的默认值
print(student.get('age'))
print(student.get('age', 20))
print(student.get('name', '无名氏'))
print(student['id'])
# 删除键值对
# del student['name']
print(student.pop('name'))
print(student.get('name', '无名氏'))
# 如果要使用下标(索引)运算,那么必须保证键一定存在
if 'birthday' in student:
print(student['birthday'])
get() 方法其实就是根据 key 来获取 value
字典中的键必须是不可变类型,例如整数(
int
)、浮点数(float
)、字符串(str
)、元组(tuple
)等类型的值;显然,列表(list
)和集合(set
)是不能作为字典中的键的,当然字典类型本身也不能再作为字典中的键,因为字典也是可变类型,但是字典可以作为字典中的值。
字典的相关操作
dict1 = {'A': 100, 'B': 200, 'C': 300}
dict2 = {'D': 400, 'E': 500, 'A': 600}
# 更新(元素的合并或更新)
dict1.update(dict2)
print(dict1)
# 删除
del dict1['B']
dict1.pop('A')
dict1.popitem()
print(dict1)
print(dict1.setdefault('C', 800))
print(dict1.setdefault('K', 1000))
print(dict1)
# 清空
dict1.clear()
print(dict1)
练习1:
输入一段英文,统计每个英文字母出现的次数。
import string
results = {letter: 0 for letter in string.ascii_lowercase}
content = input('请输入: ').lower()
for ch in content:
if ch in results:
results[ch] += 1
for key, value in results.items():
print(f'{key}: {value:>2d}次')
练习2:
字典中保存了股票信息,完成下面的操作
- 找出股票价格大于100元的股票并创建一个新的字典
- 找出价格最高和最低的股票对应的股票代码
- 按照股票价格从高到低给股票代码排序
stocks = {
'AAPL': 191.88,
'GOOG': 1186.96,
'IBM': 149.24,
'ORCL': 48.44,
'ACN': 166.89,
'FB': 208.09,
'SYMC': 21.29
}
stock1 = {key: value for key, value in stocks.items() if value > 100}
print(stock1)
print(max(zip(stocks.values(), stocks.keys()))[1])
print(min(zip(stocks.values(), stocks.keys()))[1])
print(max(stocks, key=stocks.get))
print(min(stocks, key=stocks.get))
print(sorted(stocks, key=stocks.get, reverse=True))
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 —> 统一资源定位符
loads函数可以将JSON格式的数据转成Python中字典
data = """{
"code": 200,
"msg": "success",
"newslist": [
]
}"""
news_dict = json.loads(data)
安装requests
进入终端Terminal,输入pip config set global.index-urlhttps://pypi.doubanio.com/simple(换成国内豆瓣下载
速度快),再次输入pip install requests,就能安装好requests三方库。
使用requests
联网获取JSON格式的数据并解析出需要的内容
三方库 —> requests —> pip install requests
协议 —> 通信双方需要遵守的会话的规则
HTTP / HTTPS —> 通过URL访问网络资源的协议 —> Hyper-Text Transfer Protocol (超文本传输协议)
请求(request) —— 响应(response)
选择[天行数据TianAPI - 开发者API数据平台],里面有很多免费接口选择,将请求地址和参数值复制
方法一:
requests.get('http://api.tianapi.com/txapi/pet/index?'
'key=参数值9&num=访问次数&type=0')
方法二:
url='网址',
params={
'key': '参数值',
'num': 访问次数
}
点击测试请求,查看想要获取的内容,记住相应的键
import requests
resp = requests.get('网址?'
'key=参数值&num=获取次数&type=类型')
print(resp)
# new_dict = json.loads(resp.text) # 将json格式转化为字典
new_dict = resp.json() # 将json格式转化为字典
new_list = new_dict['newslist'] #获取newslist字典
for news in new_list: # 将newslist字典的元素遍历
# 打印相应的元素
print(news['name'])
print(news['life'])
print(news['url'])