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 += 1
        else:
            print("不能重复,请重新输入")
    else:
        print("您输入的数字超出范围1-33,请重新输入")

while True:
    num2 = int(input(f"请录入蓝色第{i}注彩票:"))
    if 1 < num2 < 6:
        list_lottery.append(num2)
        break
    else:
        print("您输入的数字超出范围1-6,请重新输入")
print(f"下注为{list_lottery}")


四、练习二

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

登录验证码实现

Hutool代码改造 Hutool 有参考文档&#xff1b;很多工具类&#xff1b;把一些功能都封装好&#xff1b;都不用你自己去写&#xff1b;直接调用它的工具类 它这里会详细告诉你引入方式Hutool <dependency><groupId>cn.hutool</groupId><artifactId>hu…

陪诊小程序开发|陪诊陪护小程序让看病不再难

陪诊小程序通过与医疗机构的合作&#xff0c;整合了医疗资源&#xff0c;让用户能够更加方便地获得专业医疗服务。用户不再需要面对繁琐的挂号排队&#xff0c;只需通过小程序预约服务&#xff0c;便能够享受到合适的医疗资源。这使得用户的就医过程变得简单高效&#xff0c;并…

分布式应用:Zabbix监控Tomcat

目录 一、理论 1.Zabbix监控Tomcat 二、实验 1.Zabbix监控Tomcat 三、问题 1.获取软件包失败 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客户端日志报错 一、理论 1.Zabbix监控Tomcat &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.168.204.214 …

<Vite>HMR实现原理

什么是HMR&#xff1f; HMR&#xff08;Hot Module Replacement&#xff09;是一种开发工具&#xff0c;也就是热更新。用于在应用程序运行时替换、添加或删除模块&#xff0c;而无需完全重新加载整个页面或重新启动应用程序。这可以极大地提高开发效率和调试体验。 HMR的优势 …

【uniapp】微信小程序,取视频第一帧,前提是 图片是在 阿里云的oss上

上传视频等&#xff0c;默认为黑色&#xff0c;无法用视频的第一帧作为封面&#xff0c;以及视频的video为原生组件&#xff0c;层级很高无法覆盖问题&#xff0c;虽然有cover-view&#xff0c;但很多场景还是不灵活 实现的前提条件是 图片是在 阿里云的oss上 自己服务器是…

在线Word怎么转换成PDF?Word无法转换成PDF文档原因分析

不同的文件格式使用方法是不一样的&#xff0c;而且也需要使用不同的工具才可以打开编辑内容&#xff0c;针对不同的场合用户们难免会用到各种各样的文件格式&#xff0c;要想在不修改内容的前提下提高工作效率&#xff0c;那就需要用到文件格式转换&#xff0c;那么在线Word怎…

Springboot 实践(1)MyEclipse2019创建maven工程

项目讲解步骤&#xff0c;基于本机已经正确安装Java 1.8.0及MyEclipse2019的基础之上&#xff0c;Java及MyEclipse的安装&#xff0c;请参考其他相关文档&#xff0c;Springboot 实践文稿不再赘述。项目创建讲解马上开始。 一、首先打开MyEclipse2019&#xff0c;进入工作空间选…

bash: make: command not found

make之后报错信息如下&#xff1a;cd 对应的文件路径后 make 发现报错&#xff1a;bash: make: command not found 这个原因可能是没有安装make工具,也可能是安装了make之后,没有将make的文件路径添加到系统环境变量中 有没有安装make,可以使用Search Everything搜索是否有make…

【实战项目】c++实现基于reactor的高并发服务器

基于Reactor的高并发服务器&#xff0c;分为反应堆模型&#xff0c;多线程&#xff0c;I/O模型&#xff0c;服务器&#xff0c;Http请求和响应五部分 ​全局 反应堆模型 Channel 描述了文件描述符以及读写事件&#xff0c;以及对应的读写销毁回调函数&#xff0c;对应存储ar…

最强自动化测试框架Playwright(18)- 执行js脚本

page.evaluate&#xff08;&#xff09; API 可以在网页上下文中运行 JavaScript 函数&#xff0c;并将结果带回 Playwright 环境。 href page.evaluate(() > document.location.href) 如果结果是 Promise 或函数是异步的&#xff0c;则计算将自动等待&#xff0c;直到解析…

IDEA如何调试Stream API

Stream API现在在实际开发中应用非常广泛&#xff0c;经常会遇到需要调试Stream API的场景&#xff0c;这篇文章主要讲解如何使用IDEA调试Stream Testpublic void test(){Stream.of(10, 20, 30, 40, 50).mapToInt(e->e*10).filter(e->e>200).forEach(System.out::pri…

第八章 CUDA内存应用与性能优化篇(上篇)

cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…

0基础学C#笔记09:希尔排序法

文章目录 前言一、希尔排序的思想二、使用步骤总结 前言 希尔排序可以说是插入排序的一种变种。无论是插入排序还是冒泡排序&#xff0c;如果数组的最大值刚好是在第一位&#xff0c;要将它挪到正确的位置就需要 n - 1 次移动。也就是说&#xff0c;原数组的一个元素如果距离它…

优维低代码实践:自定义模板

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

此文详解,数据仓库管理建设的经验

目前由于数据分散在不同的存储环境或数据库中&#xff0c;对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理&#xff0c;造成资源和人力的浪费。同时&#xff0c;目前的系统架构&#xff0c;无法为未来数据驱动业务创新的理念提供友好的支撑。需要建设新…

如何构建一个 NodeJS 影院微服务并使用 Docker 部署

文章目录 前言什么是微服务&#xff1f;构建电影目录微服务构建微服务从 NodeJS 连接到 MongoDB 数据库总结 前言 如何构建一个 NodeJS 影院微服务并使用 Docker 部署。在这个系列中&#xff0c;将构建一个 NodeJS 微服务&#xff0c;并使用 Docker Swarm 集群进行部署。 以下…

d3dcompiler43.dll缺失怎么修复?dll缺失解决方法分享

在使用电脑过程中&#xff0c;我们有时会遇到一些系统文件的问题&#xff0c;其中一个常见的问题是d3dcompiler43.dll文件的损坏或丢失。当这个文件出现问题时&#xff0c;可能会导致应用程序无法正常运行或图形渲染出现异常。最近我也遇到了这个问题&#xff0c;以下是我修复d…

安达发APS|生产计划排产软件助力加工制造业智能化转型

随着全球经济一体化的不断深入&#xff0c;市场竞争日益激烈&#xff0c;加工制造企业面临着巨大的生存压力。在这种情况下&#xff0c;企业对于生产计划的精细化管理需求日益迫切。为了适应这一市场需求&#xff0c;安达发推出了专门针对加工企业的APS生产计划排产软件&#x…

机器学习实战5-KMeans聚类算法

文章目录 概述KMeansKMeans参数&接口n_clusters质心inertia模型评估指标轮廓系数Calinski-Harabaz Index 重要参数init & random_state & n_init&#xff1a;初始质心怎么放好?重要参数max_iter & tol&#xff1a;让迭代停下来重要属性与重要接口 概述 聚类 …

Linux之awk判断和循环

echo zhaoy 70 72 74 76 74 72 >> score.txt echo wangl 70 81 84 82 90 88 >> score.txt echo qiane 60 62 64 66 65 62 >> score.txt echo sunw 80 83 84 85 84 85 >> score.txt echo lixi 96 80 90 95 89 87 >> score.txt把下边的内容写入到s…