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.rhkb.cn/news/89046.html

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

相关文章

学无止境·运维高阶⑤(LVS-DR 群集 配置Nginx负载均衡)

LVS-DR 群集 && 配置Nginx负载均衡 一、LVS-DR 群集1、相关配置环境2、在RS上配置并启动脚本2.1相关脚本2.2 启动脚本&#xff0c;另一台RS同样步骤 3、LVS-DR模式配置脚本4、测试 二、Nginx负载均衡1、安装Nginx并关闭相应设置2、向主机 node2&#xff0c;node3 写入内…

JDK 17 营销初体验 —— 亚毫秒停顿 ZGC 落地实践 | 京东云技术团队

前言 自 2014 年发布以来&#xff0c; JDK 8 一直都是相当热门的 JDK 版本。其原因就是对底层数据结构、JVM 性能以及开发体验做了重大升级&#xff0c;得到了开发人员的认可。但距离 JDK 8 发布已经过去了 9 年&#xff0c;那么这 9 年的时间&#xff0c;JDK 做了哪些升级&am…

《golang设计模式》第二部分·结构型模式-01-适配器模式(Adapter)

文章目录 1. 概念1.1 角色1.2 应用场景1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 示例类图 1. 概念 定义一个适配器&#xff0c;帮助原本不能实现接口的类“实现”该接口 1.1 角色 目标&#xff08;Target&#xff09;&#xff1a;客户端调用的目标接口 被适配者&#xff08…

OSI七层模型及TCP/IP四层模型

目录 OSI七层模型 TCP/IP四层模型 OIS七层模型和TCP/IP模型图 七层详解 两种模型比较 为什么OSI七层体系结构不常用 四层详解 网络为什么要分层&#xff1f; 说说 OSI 七层模型和 TCP/IP 四层模型的关系和区别 OSI七层模型 OSI&#xff08;Open System Interconnect&a…

ModaHub魔搭社区:Milvus Cloud素材集合帖,等你查收

Hi~Milvus Cloud 的各位朋友,这是一期 Milvus Cloud 素材弹药库的集中汇总帖。随着向量数据库的火爆,越来越多的伙伴开始关注到向量数据库并开始使用 Milvus Cloud 。 考虑到目前信息获取的渠道多且分散,我们专门为大家整理了一期 Milvus Cloud 信息集合帖,让大家可以在快…

ppt怎么压缩?试试这样压缩文件

当PPT文件体积过大时&#xff0c;打开的速度就会很慢&#xff0c;演示的时候刘程度也会受到影响&#xff0c;其次&#xff0c;现在很多平台对于上传的文件是有大小限制的&#xff0c;比如超过100M的文件就无法上传、发送等等&#xff0c;那么&#xff0c;怎么才能压缩PPT文件呢…

CentOS安装Postgresql

PG基本安装步骤 安装postgresql&#xff1a; sudo yum install postgresql-server初始化数据库&#xff1a;安装完毕后&#xff0c;需要初始化数据库并创建初始用户&#xff1a; sudo postgresql-setup initdb启动和停止服务&#xff1a; sudo systemctl start postgresql sudo…

Android之版本号、版本别名、API等级对应关系(全)(一百六十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

微服务07-分布式缓存

前提: 单机的Redis存在四大问题: 解决办法:基于Redis集群解决单机Redis存在的问题 1、Redis持久化 Redis 具有持久化功能,其会按照设置以 快照 或 操作日志 的形式将数据持久化到磁盘。 Redis有两种持久化方案: RDB持久化AOF持久化注意: RDB 是默认持久化方式,但 Red…

Clone函数

概述 Clone函数是一种用于复制的计算机函数。在程序编写中&#xff0c;除了自定义一个拷贝构造函数来实现对象复制外&#xff0c;还可以实现一个clone函数。这需要借助编译器实现的一个隐藏拷贝构造函数&#xff0c;这样的做法&#xff0c;更省心。 中文名clone函数外文名clon…

Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)

一.Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 本次测试使用数据库实例SqlServer2008r2版 错误详细&#xff1a; 标题: Microsoft SQL Server Management Studio ------------------------------ 还原数据库“Mvc_HNHZ”时失败。 (Microsoft.SqlServer.…

设计模式之Bridge模式的C++实现

目录 1、Bridge模式的提出 2、Bridge模式的定义 3、Bridge模式总结 4、需求描述 5、多继承方式实现 6、使用Bridge设计模式实现 1、Bridge模式的提出 在软件功能模块设计中&#xff0c;如果类的实现功能划分不清晰&#xff0c;使得继承得到的子类往往是随着需求的变化&am…

关于 Eclipse 的一场 “三角关系”

上个世纪 90 年代&#xff0c;世界上的计算机要么不联网&#xff0c;要么在企业内部联网。但是&#xff0c;在互联网的概念下&#xff0c;计算机之间共享信息和资源的需求成为了必要。 1995 年 5 月&#xff0c;Java 横空出世。Java 的父亲是当时凭借 Solaris 操作系统风头正盛…

flutter 手写日历组件

先看效果 直接上代码 calendar_popup_view.dart import package:flutter/material.dart; import package:intl/intl.dart;import custom_calendar.dart; import hotel_app_theme.dart;class CalendarPopupView extends StatefulWidget {const CalendarPopupView({required th…

OpenCV项目开发实战--相机校准—并附实例Python/C++代码实现

介绍 相机标定是计算机视觉中的一项基本任务在 3D 重建、对象跟踪、增强现实和图像分析等各种应用中至关重要。准确的校准通过校正失真和估计相机的内在和外在参数来确保精确的测量和可靠的分析。这本综合指南深入探讨了相机校准的原理、技术和算法。我们探索获取相机的内在和…

macOS使用ffmpeg与QT进行音视频推拉流

1.先启动流服务器 ./mediamtx 2.开始推流: ffmpeg -re -stream_loop -1 -i /Users/hackerx/Desktop/test.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream 3. 安装ffmpeg 4.4 brew install ffmpeg4 4.添加ffmpeg头文件目录与库目录 5.链接ffmpeg相关库…

Flink窗口分类简介及示例代码

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 1. 流式计算2. 窗口3. 窗口的分类◆ 基于时间的窗口&#xff08;时间驱动&#xff09;1) 滚动窗口&#xff08;Tumbling Windows&#xff09;2) 滑动窗口&#xff08;Sliding Windows&…

Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库

Axure RP移动端高保真CRM办公客户管理系统原型模板及元件库&#xff0c;一套典型的移动端办公工具型APP Axure RP原型模板&#xff0c;可根据实际的产品需求进行扩展&#xff0c;也可以作为移动端原型设计的参考案例。为提升本作品参考价值&#xff0c;在模板设计过程中尽量追求…

VVIC-据关键词取商品列表

一、接口参数说明&#xff1a; item_search-根据关键词取商品列表&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/vvic/item_search 名称类型必须描述keyString是调用key&#xff08;点击…

c++中的多态

文章目录 1.多态的概念1.1概念 2.多态的定义及实现2.1多态的构成条件2.2虚函数2.3虚函数的重写2.4 C11 override 和 final2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类3.1概念3.2接口继承和实现继承 4.多态的原理4.1虚函数表4.2多态原理分析4.3 动态绑定与静态绑定 5.单…