Python系统学习1-7-字典

一、字典

1、概念及内存图

列表:由一系列变量组成的可变序列容器
字典:由一系列键值对组成的可变散列容器
字典优势:利用(内存)空间,换取(CPU查找)时间
       键key  必须唯一且为不可变数据(字符串,数字,元组),若相同,第二个相同的key覆盖第一个(通过不可变保证唯一性)
      值value 没有限制

2、基本操作

(1)创建

# 列表善于存储单一纬度数据
list_name = ["丽丽","红红","嘿嘿"]
list_age = [20, 54, 56]
list_sex = ["女", "男", "女"]

# 字典善于存储多个维度数据
# 创建方法1:字典名 = {键1:值1,键2:值2}

dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}
dict_hh= {"name":"红红", "age":"54", "sex":"男"}
dict_hs = {"name":"嘿嘿", "age":"56", "sex":"女"}

创建方法2:字典名 = dict (容器)

# 需要保质容器的每个元素必须能一分为二

list_name = ["丽丽","红红","嘿嘿"]

print(dict(list_name))

(2)添加

添加,其实就是修改(如果key在,就是修改,如果key不在,就是添加)

添加方法:字典名[键] = 值

dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}

dict_ll["money"] = 10000

# 定位快,修改

dict_ll["age"] = 26

# 读取,先判断,再读取 print(dict_ll["age"])

注意:dict中根据key找value,直接定位, 字典名[键]

                     根据value找key,则需要一一遍历

(3)删除

del 字典名[键1],字典名[键2]  删除后键值对同步消失

(4)遍历
dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}
# 所有key
for key in dict_ll:print(key)
'''
name
age
sex
'''
# 所有key
for key in dict_ll.keys():print(key)
'''
name
age
sex
'''# 所有value
for value in dict_ll.values():print(value)
'''
丽丽
20
女
'''
# 所有键和值
for item in dict_ll.items():print(item)
'''
('name', '丽丽')
('age', '20')
('sex', '女')
'''
# 等价于
for key,value in dict_ll.items():  # 上述的拆包print(key,value)
'''
name 丽丽
age 20
sex 女
'''
# 默认打印只有key值
print(dict_ll) #['name', 'age', 'sex']
print(dict_LL.items())

3、列表list和字典dict互相转换

dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}
# dict转list
print(list(dict_ll.items()))
# [('name', '丽丽'), ('age', '20'), ('sex', '女')]
# list转dict
print(dict([('name', '丽丽'), ('age', '20'), ('sex', '女')]))
# {'name': '丽丽', 'age': '20', 'sex': '女'

4、练习

# 疫情信息
list_epidemic = [{"region": "台湾", "new": 16,"now": 2339, "total": 16931,},{"region": "陕西", "new": 182,"now": 859, "total": 1573,},{"region": "浙江", "new": 2,"now": 505, "total": 2008,},
]
# --打印所有疫情信息
for i in range(len(list_epidemic)):print(list_epidemic[i]["region"])print(list_epidemic[i]["new"])# 优化
for item in list_epidemic:print(item["region"])print(item["new"])# --查找新增人数大于10的地区名称(将结果存入新列表)
new_list = []
for i in range(len(list_epidemic)):if list_epidemic[i]["new"]>10:new_list.append(list_epidemic[i]["region"])
print(new_list)# 优化
new_list = []
for item in list_epidemic:if item["new"] > 10:new_list.append(item["new"])
# --查找现有人数最大的地区信息(结果为字典)
max = list_epidemic[0]["now"]
flag = 0
for i in range(0,len(list_epidemic)):if max <= list_epidemic[i]["now"]:max = list_epidemic[i]["now"]flag = i
print(list_epidemic[flag])
list_epidemic = [{"region": "台湾", "new": 16,"now": 2339, "total": 16931,},{"region": "陕西", "new": 182,"now": 859, "total": 1573,},{"region": "浙江", "new": 2,"now": 505, "total": 2008,},
]
# --根据现有人数对疫情信息降序(大->小)排列
for i in range(len(list_epidemic)):for j in range(i+1,len(list_epidemic)):if list_epidemic[i]["now"] < list_epidemic[j]["now"]:list_epidemic[i],list_epidemic[j]=list_epidemic[j],list_epidemic[i]

二、容器小结

1、种类与特征

        字符串:存储字符编码(a-97),不可变,序列

        列表list:存储变量(地址),可变,序列

        元组tuple:存储变量(地址),不可变,序列

        字典dict:存储键值对,可变,散列

# 字典想拿到第一个键值对  转换为列表/元组
dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}
list_key = list(dict_ll())  # 拿到的只有键
print(list_key)
key = list_key[0]
value = dict_ll[key]list_item = list(dict_ll.items())
print(list_item[0])# 转成元组更好,省内存
tuple_item = tuple(dict_ll.items())
print(tuple_item[0])

2、Python语言有哪些数据类型

        可变类型:预留空间+自动扩容
            如:列表list,字典dict
            优点:操作数据方便(能够增删改)
            缺点:占用内存太大
        不可变类型:按需分配
            如:int,float,bool,str,tuple
            优点:占用内存小
            缺点:不能适应现实的变化

3、序列与散列

        序列:支持索引切片,定位数据灵活
        散列:通过键定位数据,速度最快

4、语法

                                 列表                             字典
   创建
        列表名=[数据1,数据2]                    字典名={键1:值1,键2:值2}
        列表名=list(容器)                              字典名=dict(容器)
   添加
        列表名.append(元素)                        字典名[键]=值  不可变数据才可以当键
        列表名.insert(索引,元素)
   定位
        列表名[整数]                                      字典名[键]
        列表名[开始:结束:间隔]
   删除
         del 列表名[索引或切片]                    del 字典名[键] ,键值都删除
                 注意索引越界
         列表名.remove(数据)
                 注意数据必须存在于列表中
   遍历
        for item in 列表名:                            for key in 字典:
        for i range(len(列表名)):                   for value in 字典.values():
                                                                 for k,v in 字典.items(): 

三、练习1

# 2. 在终端中获取颜色(RGBA),打印描述信息,
#     否则提示颜色不存在
#     "R" -> "红色"
#     "G" -> "绿色"
#     "B" -> "蓝色"
#     "A" -> "透明度"
dict_rgb = {"R":"红色", "G":"绿色", "B":"蓝色", "A":"透明度"}
input_rgb = input("请输入颜色:")
if input_rgb in dict_rgb:print(dict_rgb[input_rgb])
else:print("不存在")# 3. 将列表中的数字累减
list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
sum_last = list02[0]
for i in range(1, len(list02)):sum_last -= list02[i]
print(sum_last)# 4. 在列表中查找最大值(不使用max,自定义算法实现)
#     思路:
#         假设第一个元素就是最大值
#         依次与后面元素进行比较
# #         如果发现更大值,则替换
list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
max = list02[0]
for item in list02:if max < item:max = item
print(max)# 5. (选做)彩票:双色球
#     红色:6个  1--33之间的整数   不能重复
#     蓝色:1个  1--16之间的整数
#     1) 随机产生一注彩票(列表(前六个是红色,最后一个蓝色))
#     2) 在终端中录入一支彩票
#     要求:满足彩票的规则.
import random
list_lottery = []
for i in range(6):num = random.randint(1,33)while num in list_lottery:num = random.randint(1, 33)list_lottery.append(num)
list_lottery.append(random.randint(1,16))# 优化
import random
list_lottery = []
while len(list_lottery) < 6:num = random.randint(1, 33)if num not in list_lottery:list_lottery.append(num)
list_lottery.append(random.randint(1,16))# 2) 在终端中录入一支彩票
#     要求:满足彩票的规则.
list_lottery = []
i = 1
while i <= 6:num = int(input(f"请录入红色第{i}注彩票:"))if 1 < num < 33:if num not in list_lottery:list_lottery.append(num)i += 1else:print("不能重复,请重新输入")else:print("您输入的数字超出范围1-33,请重新输入")while True:num2 = int(input(f"请录入蓝色第{i}注彩票:"))if 1 < num2 < 6:list_lottery.append(num2)breakelse:print("您输入的数字超出范围1-6,请重新输入")
print(f"下注为{list_lottery}")

四、练习二

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hbase 报错 Master passed us a different hostname to use; was=

原因 wsl2的 /etc/hosts 配置的不兼容,我这里是ubuntu22 命令行输入hostname 看输出什么,比如输出 aaa 那么替换/etc/hosts 127.0.0.1 aaa

每天一个知识点——L2R

面试的时候&#xff0c;虽然做过医疗文献搜索&#xff0c;也应用过L2R的相关模型&#xff0c;但涉及到其中的一些技术细节&#xff0c;都会成为我拿不下offer永远的痛。也尝试过去理解去背下一些知识点&#xff0c;终究没有力透纸背&#xff0c;随着时间又开始变得模糊&#xf…

海量数据迁移,亚马逊云科技云数据库服务为大库治理提供新思路

1.背景 目前&#xff0c;文档型数据库由于灵活的schema和接近关系型数据库的访问特点&#xff0c;被广泛应用&#xff0c;尤其是游戏、互联网金融等行业的客户使用MongoDB构建了大量应用程序&#xff0c;比如游戏客户用来处理玩家的属性信息&#xff1b;又如股票APP用来存储与时…

Stable Diffusion - 幻想 (Fantasy) 风格与糖果世界 (Candy Land) 人物提示词配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132212193 图像由 DreamShaper8 模型生成&#xff0c;融合糖果世界。 幻想 (Fantasy) 风格图像是一种以想象力为主导的艺术形式&#xff0c;创造了…

27.Netty源码之FastThreadLocal

highlight: arduino-light FastThreadLocal FastThreadLocal 的实现与 ThreadLocal 非常类似&#xff0c;Netty 为 FastThreadLocal 量身打造了 FastThreadLocalThread 和 InternalThreadLocalMap 两个重要的类。下面我们看下这两个类是如何实现的。 FastThreadLocalThread 是对…

【论文阅读】NoDoze:使用自动来源分类对抗威胁警报疲劳(NDSS-2019)

NODOZE: Combatting Threat Alert Fatigue with Automated Provenance Triage 伊利诺伊大学芝加哥分校 Hassan W U, Guo S, Li D, et al. Nodoze: Combatting threat alert fatigue with automated provenance triage[C]//network and distributed systems security symposium.…

uniapp安卓ios打包上线注意事项

1、安卓包注意事项 隐私政策弹框提示 登录页面隐私政策默认不勾选隐私政策同意前不能获取用户权限APP启动时&#xff0c;在用户授权同意隐私政策前&#xff0c;APP及SDK不可以提前收集和使用IME1、OAID、IMS1、MAC、应用列表等信息 ios包注意事项 需要有注销账号的功能 3、安…

前后端分离------后端创建笔记(05)用户列表查询接口(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

通过网关访问微服务,一次正常,一次不正常 (nacos配置的永久实例却未启动导致)

微服务直接访问没问题&#xff0c;通过网关访问&#xff0c;就一次正常访问&#xff0c;一次401错误&#xff0c;交替正常和出错 负载均衡试了 路由配置检查了 最后发现nacos下竟然有2个order服务实例&#xff0c;我明明只开启了一个呀 原来之前的8080端口微服务还残留&…

基于架构的软件开发方法

基于架构的软件开发方法 基于架构的软件开发方法是由架构驱动的&#xff0c;即指由构成体系结构的商业、质量和功能需求的组合驱动的。使用ABSD 方法&#xff0c;设计活动可以从项目总体功能框架明确就开始&#xff0c;这意味着需求抽取和分析还没有完成(甚至远远没有完成)&am…

纯C#使用Visionpro工具2 操作斑点工具

结果图 通过斑点工具中非圆性找取圆特征 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.For…

ApacheCon - 云原生大数据上的 Apache 项目实践

Apache 软件基金会的官方全球系列大会 CommunityOverCode Asia&#xff08;原 ApacheCon Asia&#xff09;首次中国线下峰会将于 2023 年 8 月 18-20 日在北京丽亭华苑酒店举办&#xff0c;大会含 17 个论坛方向、上百个前沿议题。 字节跳动云原生计算团队在此次 CommunityOve…

OpenSSL 远程升级到 3.2.1

OpenSSL 远程升级到 3.2.1 文章目录 OpenSSL 远程升级到 3.2.1背景升级 OpenSSL1. 查看 OpenSSL版本2. 下载最新稳定版本 OpenSSL3. 解压缩&#xff0c;安装4. 配置 背景 最近的护网行动&#xff0c;被查出来了好几个关于OpenSSH的漏洞。需要升级OpenSSH&#xff0c;升级OpenS…

冠达管理:价格破发是什么意思啊?

价格破发是股票商场中一个比较常见的术语&#xff0c;也是常常让出资者感到困惑的现象之一。价格破发是指新股发行后&#xff0c;由于各种原因&#xff0c;股票价格低于发行价的现象。那么&#xff0c;价格破发的原因是什么呢&#xff1f;价格破发与出资者有哪些联系呢&#xf…

企业直播MR虚拟直播(MR混合现实直播技术)视频介绍

到底什么是企业直播MR虚拟直播&#xff08;MR混合现实直播技术&#xff09;&#xff1f; 企业直播MR虚拟直播新玩法&#xff08;MR混合现实直播技术&#xff09; 我的文章推荐&#xff1a; [视频图文] 线上研讨会是什么&#xff0c;企业对内对外培训可以用线上研讨会吗&#x…

24届近5年南京工业大学自动化考研院校分析

今天给大家带来的是南京工业大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、南京工业大学 学校简介 南京工业大学&#xff08;Nanjing Tech University&#xff09;&#xff0c;简称“南工”&#xff0c;位于江苏省南京市&#xff0c;由国家国防科技工业局、住…

探讨uniapp的网络通信问题

uni-app 中有很多原生的 API&#xff0c;其中我们经常会用到的肯定有&#xff1a;uni.request(OBJECT) method 有效值 注意&#xff1a;method有效值必须大写&#xff0c;每个平台支持的method有效值不同&#xff0c;详细见下表。 success 返回参数说明 data 数据说明 最终…

【数据结构OJ题】移除链表元素

原题链接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/description/ 1. 题目描述 2. 思路分析 我们可以定义一个结构体指针变量cur&#xff0c;让cur一开始指向头结点&#xff0c;同时定义一个结构体指针prev&#xff0c;令prev初始化为空指针NULL…