容器型数据类型 - 字典
字典的创建和使用
- keys():获取字典中的键
- values():获取字典中的值
- items():获取字典中的键值对
"""
example02 - 字典的创建和使用
Author: Asus
Date: 2021/7/30
"""
# 字面量语法
student1 = {
'id': 1001,
'name': '李四',
'sex': True,
'birthday': '1980-11'
}
print(student1)
print(len(student1))
# 遍历字典中的键
for key in student1.keys():
print(key, student1[key])
print('-' * 10)
# 遍历字典中的值
for value in student1.values():
print(value)
print('-' * 10)
# 遍历字典中的键值对
for key, value in student1.items():
print(key, value)
其他创建容器型类型的方法
# 构造器函数
student2 = dict(id=1002, name='王大锤', sex=True, birthday='1990-1')
print(student2)
# 生成式(推导式)语法
list1 = [i for i in range(1, 10)]
print(list1)
set1 = {i for i in range(1, 10)}
print(set1)
dict1 = {i: i ** 2 for i in range(1, 10)}
print(dict1)
# 生成器
gen_obj = (i for i in range(1, 10))
print(next(gen_obj))
print(next(gen_obj))
print(next(gen_obj))
字典的运算
- in / not in
- get():通过key获取value
- 删除:del、pop()
"""
example03 - 字典的运算
Author: Asus
Date: 2021/7/30
"""
student = dict(id=1002, name='王大锤', sex=True, birthday='1990-1')
# 字典的索引运算放在赋值运算符的左边
# 如果索引对应的键是存在的,就更新它的值
student['name'] = '王二锤'
student['birthday'] = '1991-5'
# 字典中没有对应的索引,就增加一组新的‘键值对’
student['address'] = '四川成都'
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', '无名氏'))
# 删除键值对
# del student['name']
print(student.pop('name'))
print(student.get('name', '无名氏'))
# 如果使用下标(索引)运算,那么必须要保证键一定存在,不然程序会崩溃
if 'birthday' in student:
print(student['birthday'])
字典的方法
- updata():元素的合并或更新
- 删除:del、pop()、popitem()
- setdefault可以向字典中存入新的键值对或返回原来的值
- clear():清空所有内容
"""
example04 - 字典的方法
Author: Asus
Date: 2021/7/30
"""
dict1 = {'A': 100, 'B': 200, 'C': 300}
dict2 = {'D': 400, 'C': 500, 'A': 600}
# 更新(元素的合并或更新)
dict1.update(dict2)
print(dict1)
# 删除 ---> 键必须存在,否则会产生KeyError
# del dict1['B']
dict1.pop('B')
dict1.popitem()
print(dict1)
# setdefault可以向字典中存入新的键值对或返回原来的值
# setdefault方法的第一个参数是键,第二个参数是键对应的值
# 如果这个键在字典中存在,更新这个键之后会返回原来与这个键对应的值
# 如果这个键在字典中不存在,加入这个键,方法将返回第二个参数的值,默认为None
dict1.setdefault('C', 800)
dict1.setdefault('K', 10000)
print(dict1)
# 清空所有
# dict1.clear()
例子
- 字典中保存了股票信息,完成下面的操作:
找出股票价格大于100元的股票并创建一个新的字典
找出价格最高和最低的股票对应的股票代码
按照股票价格从高到低给股票代码排序
"""
example06 - 字典中保存了股票信息,完成下面的操作
1. 找出股票价格大于100元的股票并创建一个新的字典
2.找出价格最高和最低的股票对应的股票代码
3.按照股票价格从高到低给股票代码排序
Author: Asus
Date: 2021/7/30
"""
stocks = {
'AAPL': 191.88,
'GOOG': 1186.96,
'IBM': 149.24,
'ORCL': 48.44,
'ACN': 166.89,
'FB': 208.09,
'SYMC': 21.29
}
new_stocks = {}
for key, value in stocks.items():
if value > 100:
new_stocks[key] = value
print(new_stocks)
# zip()把两组值压成一个二元组
dict1 = dict(zip('ABCDE', [1, 2, 3, 4]))
print(dict1)
print(max(zip(stocks.values(), stocks.keys()))) # (1186.96, 'GOOG')
print(max(zip(stocks.values(), stocks.keys()))[1])
print(min(zip(stocks.values(), stocks.keys()))[1])
附加:
# max、min、sorted函数都有一个名为key的参数,该参数可以指定比较元素大小的规则
words = ['apple', 'zoo', 'watermelon', 'zealot', 'internationlization', 'pear']
print(max(words, key=len))
print(min(words, key=len))
print(words.sort(key=len))
优化程序:
stocks = {
'AAPL': 191.88,
'GOOG': 1186.96,
'IBM': 149.24,
'ORCL': 48.44,
'ACN': 166.89,
'FB': 208.09,
'SYMC': 21.29
}
new_stocks = {key: value for key, value in stocks.items() if value > 100}
print(new_stocks)
print(max(stocks, key=stocks.get)) # 指定value比较,但获取的是key
print(min(stocks, key=stocks.get))
print(sorted(stocks, key=stocks.get, reverse=True))
JSON字符串
操作系统:windows、i0S、Android、macOS、Linux、Unix
编程语言:Python、Java、PHP、Go、C++
1.两个异构的系统之间交换数据最好的选择是交换纯文本(可以屏蔽系统和编程语言的差异)
2.纯文本应该是结构化或半结构化的纯文本(有一定的格式)
~ XML—> eXtensible Markup Language —>可扩展标记语言
~ JSON —> JavaScript 0bject Notation —>大多数网站和数据接口服务使用的数据格式
~ YAML—> Yet Another Markup Language
3. 如何将JSON格式转成Python程序的字典
json —> loads
loads函数可以将JSON格式的数据转换成字典
URL —> Universal Resourse Locator —> 统一资源定位符
"""
example08 - 联网获取JSON格式的数据并解析出需要的内容
三方库 ---> requests
协议 ---> 通信双方需要遵守会话的规则
HTTP / HTTPS ---> 通过URL访问网络资源的协议 ---> 超文本传输协议
请求(requests) - 响应(response)
Author: Asus
Date: 2021/7/30
"""
import json
import requests
resp = requests.get(
url='http://api.tianapi.com/tiyu/index', # 每个人的网址不一样
params={
'key': '08f7f88fbb4e9eea01538279729f1966',
'num': 10
}
)
# news_dict = json.loads(resp.text)
# 从响应中获取JSON数据直接转换成字典
news_dict = resp.json()
print(news_dict)
# news_list = news_dict['newslist']
# for news in news_list:
# print(news['title'])
# print(news['url'])
实例
1.输入一段话,统计每个英文字母出现的次数。
以这段话为例:
Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.
"""
example05 - 输入一段话,统计每个英文字母出现的次数。
Author: Asus
Date: 2021/7/30
"""
import string
dict1 = {letter: 0 for letter in string.ascii_lowercase}
# print(dict1)
sentence = input('输入一段话:').lower()
for ch in sentence:
if ch in dict1:
dict1[ch] += 1
for key, value in dict1.items():
print(f'{key}: {value:>2d}次')
2.输入一段话,统计每个单词出现的次数。
"""
homework02 - 输入一段话,统计每个单词出现的次数。
Author: Asus
Date: 2021/7/30
"""
sentence = input('输入一段话:')
sentence = sentence.replace(',', ' ')
nums = sentence.split()
# print(nums)
# print(type(nums))
dict1 = {word: 0 for word in nums}
print(dict1)
for se in nums:
if se in dict1:
dict1[se] += 1
for key, value in dict1.items():
print(f'{key}: {value:>2d}次')
3.联网获取JSON格式的数据并解析出需要的内容(垃圾分类)
"""
homework03 - 联网获取JSON格式的数据并解析出需要的内容(垃圾分类)
Author: Asus
Date: 2021/7/30
"""
import requests
word = input('垃圾名称:')
resp = requests.get(
url='http://api.tianapi.com/txapi/lajifenlei/index',
params={
'key': '08f7f88fbb4e9eea01538279729f1966',
'word': word,
'num': 10
}
)
news_list = resp.json()['newslist']
for news_dict in news_list:
print(news_dict['name'])
print(news_dict['type'])
print(news_dict['aipre'])
print(news_dict['explain'])
print(news_dict['contain'])
print(news_dict['tip'])