容器型数据类型 - 字典

容器型数据类型 - 字典

字典的创建和使用

  • 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'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值