【Python零基础学习】字典

news2024/9/28 9:30:15

文章目录

  • 前言
  • 一、简单字典示例
  • 二、使用字典
  • 三、字典遍历
  • 四、嵌套
  • 总结


前言

Python 字典 是一种非常强大且灵活的数据结构,它允许你通过键(key)来存储和检索值(value)。想象一下,字典就像一个巨大的电话簿,其中每个电话号码都有一个对应的名字。在这个电话簿里,你可以通过名字(键)快速找到对应的电话号码(值)。
字典中的每个元素都由一对键值对组成,键必须是唯一的,而且通常是不可变的数据类型,如字符串或数字。值则可以是任意类型的数据,甚至可以是另一个字典或列表。这种灵活性使得字典成为处理各种复杂数据的理想选择。
与列表不同,字典是无序的,这意味着元素不会按照插入的顺序排列。这使得字典非常适合用来表示现实生活中的映射关系,例如:

  • 电话簿:姓名作为键,电话号码作为值。
  • 词汇表:单词作为键,定义作为值。
  • 配置文件:配置项名称作为键,配置值作为值。

字典的一个重要特点是基于键的快速查找机制。无论字典中有多少个元素,查找时间几乎都是固定的,这使得字典在处理大量数据时非常高效。
举个例子,假设你正在开发一个游戏,需要记录玩家的分数。你可以使用字典来存储每个玩家的分数,其中玩家的名字作为键,分数作为值。这样,你就可以轻松地通过玩家的名字查询他们的分数,或者更新他们的分数。
总之,Python 字典是一种非常实用的数据结构,它不仅能够高效地存储和检索数据,还能够帮助你轻松地管理复杂的数据关系。无论是处理简单的数据还是构建复杂的程序,字典都是非常有价值的工具。


一、简单字典示例

dictionary = {'name': 'John', 'age': 30, 'city': 'New York'}

print(dictionary["name"])

在这里插入图片描述

类似于java的Map,原理是一致的,操作方式不同罢了。


二、使用字典

Python字典是一种高效的数据结构,用于存储无序的键值对集合。每个键(key)必须是唯一的且不可变的,而值(value)则可以是任意类型的数据,包括数字、字符串、列表、甚至其他字典。字典通过键来快速访问、添加、修改或删除值,适用于需要频繁查找和更新数据的场景。字典的创建和操作非常灵活,支持多种内置方法,如 get(), keys(), values(), items() 等,便于数据的管理和操作。字典在Python编程中广泛应用于数据存储、配置管理、缓存等多种场景,是处理复杂数据关系的强大工具。

访问字典中的值

# 创建一个字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}

# 使用键访问值
name = my_dict['name']
age = my_dict['age']
city = my_dict['city']

print(f"Name: {name}")  # 输出: Name: Alice
print(f"Age: {age}")    # 输出: Age: 25
print(f"City: {city}")  # 输出: City: New York

在这里插入图片描述

这里是访问字典中某个键关联的值的一种最简单方式,即指定字典名并且把键放在后面的方括号内。

添加键值对

字典是动态结构,可以添加键值对,格式为 字典名[‘键’] = 值

# 创建一个字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}

# 添加一个新的键值对
my_dict['email'] = 'alice@example.com'

# 打印字典以查看更新后的内容
print(my_dict)

在这里插入图片描述

Python在3.7版本以后开启了插入顺序的保证,即遍历时的顺序和插入时的顺序一致。

使用空字典

当我们需要使用字典来存储用户提供的数据或者编写能自动生成大量键值对的代码,通常需要先定义一个空字典。

my_dict = {}

my_dict['name'] = 'John'

my_dict['age'] = 30

my_dict['city'] = 'New York'

print(my_dict)

在这里插入图片描述

修改字典中的值

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

print(f"原来的字典值为:{my_dict}")

my_dict['name'] = 'Jane'

my_dict['age'] = my_dict['age'] + 9

print(f"修改后的字典值为:{my_dict}")

先是创建了一个字典,接着修改了name和age对应的值,打印结果如下

在这里插入图片描述

删除键值对

Python字典中不需要的信息,可以使用del语句把对应的键值对彻底删除

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

print(my_dict)

del my_dict['age']

print(my_dict)

以上代码删除了键为age的字典值
在这里插入图片描述

类似的对象组成的字典

favorite_languages = {
    'jen': 'python',
    'sarah': 'c++',
    'edward': 'ruby',
    'phil': 'python',
}

language = favorite_languages['sarah'].title()

print(f"Sarah's favorite language is {language}.")

代码中设置了一个字典,关于每个人最喜欢的编程语言,值可以相同

在这里插入图片描述

使用get()来访问值

前面已经说了一种使用放在方括号内的键从字典中获取感兴趣的值,但可能会引发问题:指定的键不存在就会出错。

favorite_languages = {
    'jen': 'python',
    'sarah': 'c++',
    'edward': 'ruby',
    'phil': 'python',
}

language = favorite_languages['jack']

print(f"Sarah's favorite language is {language}.")

在这里插入图片描述
字典中根本就不存在 jack这个键,直接报错了,我们使用get()方法获取

favorite_languages = {
    'jen': 'python',
    'sarah': 'c++',
    'edward': 'ruby',
    'phil': 'python',
}

language = favorite_languages.get('jack', 'Not found')

print(f"Sarah's favorite language is {language}.")

在这里插入图片描述

get()方法有两个参数,第一个用于指定键,必不可少,第二个参数用于当指定的键不存在时返回的值,可选。

如果不写默认返回值:

language = favorite_languages.get('jack')

那么这个返回的结果就是 None ,表示不存在,非错误。


三、字典遍历

Python字典复杂的可以存储上百万个键值对,这就需要字典支持遍历,Python字典既可以支持遍历所有键值对,也可以单独支持遍历键或者值。

遍历所有键值对

# 定义一个包含较多数据的简单字典
data_dict = {
    "name": "Alice",
    "age": 30,
    "city": "New York",
    "email": "alice@example.com",
    "phone": "+1234567890",
    "job_title": "Software Engineer",
    "company": "TechCorp",
    "years_of_experience": 5,
    "is_student": False
}

# 打印字典中的所有键值对
for key, value in data_dict.items():
    print(f"{key}: {value}")

可以看到遍历字典,使用到了for循环,第一部分是两个变量,表示键和值,名称随意。第二部分是字典名调用方法items(),这部分是返回一个键值对列表。

在这里插入图片描述

遍历所有键

不需要值时,我们使用keys()方法遍历所有键,有时会很有效。

字典部分还是使用上述代码,for循环遍历键的使用示例如下

# 打印字典中的所有键值对
for key in data_dict.keys():
    print(key)

在这里插入图片描述

注意keys()方法返回的是一个列表,我们可以使用列表的 innot in 方法来判断键是否存在。

# 定义一个包含较多数据的简单字典
data_dict = {
    "name": "Alice",
    "age": 30,
    "city": "New York",
    "email": "alice@example.com",
}

key = "phone"

if key in data_dict:
    print(f"The phone number of {data_dict['name']} is {data_dict[key]}")
else:
    print(f"The key {key} is not in the dictionary")

key = "email"
if key in data_dict:
    print(f"The email address of {data_dict['name']} is {data_dict[key]}")
else:
    print(f"The key {key} is not in the dictionary")

在这里插入图片描述

按特定顺序遍历所有键

Python中提供了 sorted() 函数来获得特定顺序排列的键列表的副本

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
    print(f"{name.title()}, thank you for taking the poll.")

在这里插入图片描述

遍历字典中的所有值

Python中使用 values() 方法遍历字典的所有值

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}

for language in favorite_languages.values():
    print(language.title())

在这里插入图片描述

若获取的值当中有重复的怎么办?别着急,Python为我们提供了 set() 方法,把值列表传进去即可

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}

for language in set(favorite_languages.values()):
    print(language.title())

Python被去重了

在这里插入图片描述

集合简述

在 Python 中,集合(set)是一种内置数据类型,用于存储唯一且无序的元素集合。集合中的每个元素都是唯一的(不允许重复),并且集合本身是可变的,这意味着你可以添加或删除元素,但不能改变单个元素。

创建集合的方式:使用{}

  my_set = {1, 2, 3}

注意:my_set = {} 创建的不是一个空集合,而是一个空字典。创建空集合,需要使用set(), my_set = set()

languages = {'python', 'rust', 'python', 'c'}

print(languages)

在这里插入图片描述


四、嵌套

有时候,需要把多个字典存储在列表中或将列表作为值存储在字典中,这称之为嵌套。可以在列表中嵌套字典,也可以在字典中嵌套列表,甚至在字典中嵌套字典。这是复杂的数据结构,其他语言也是一样。

列表中存储字典

dict_0 = {
    'name': 'John',
    'age': 25,
    'city': 'New York',
    'country': 'USA'
}

dict_1 = {
    'name': 'Jane',
    'age': 30,
    'city': 'Los Angeles',
    'country': 'USA'
    }

dict_2 = {
    'name': 'Bob',
    'age': 40,
    'city': 'Chicago',
    }


people = [dict_0, dict_1, dict_2]

for person in people:
    print(person)

这是一段简单的代码,定义了三个字典,然后把三个字典添加到列表中,最后for循环打印

在这里插入图片描述

字典中存储列表

dict = {
    'name': 'John',
    'age': 25,
    'city': 'New York',
    'country': 'USA',
    'hobbies': ['reading', 'swimming', 'hiking']
}
for hobby in dict['hobbies']:
    print(hobby)

dict字典中有一个键 hobbies,关联的值为爱好列表

在这里插入图片描述

字典中存储字典

字典中可以嵌套字典,但是代码结构会变得复杂,而且字典元素可以有不同的键值

# 创建一个嵌套字典来存储员工的信息
employee_info = {
    'employee1': {
        'name': 'Alice',
        'age': 30,
        'department': 'Engineering'
    },
    'employee2': {
        'name': 'Bob',
        'age': 25,
        'department': 'Sales',
        'salary': 50000
    },
    'employee3': {
        'name': 'Charlie',
        'age': 35,
        'department': 'Marketing'
    }
}

print(employee_info)


总结

本篇文章介绍了字典这种数据结构的用法,以及字典和列表的、字典和字典的相互嵌套。实际当中要注意嵌套层级的深度。本文依然是比较基础的内容,但代码示例中展示的用法需要多动手练习,才能熟练掌握。

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

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

相关文章

免费分享一套SpringBoot+Vue员工管理(职工管理,考勤管理,奖惩管理,合同管理)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue员工管理(职工管理,考勤管理,奖惩管理,合同管理)管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue员工管理(职工管理,考勤…

Redis远程字典服务器(6) —— list类型详解

目录 一,基本情况 二,list常用命令 2.1 lpush,lrange 2.2 对于“下标越界”的思考 2.3 lpushx,rpush,rpushx 2.4 lpop,rpop 2.5 lindex,linsert,llen 2.6 lrem 2.7 ltrim…

基于B站的热门视频数据分析与情感分析【关联性、主题、情感分析】

目录 2 研究内容 2.1 主要研究内容 2.2 拟解决的关键问题 2.2.1热门视频特征的识别和提取 2.2.2情感分析与用户反馈 2.3技术路线 2.3.1数据收集 2.3.2数据预处理 2.3.3数据挖掘 2.3.4 数据可视化 2.4可行性分析 2.4.1技术可行性 2.4.2数据可行性 2.4.3经济可行性 2.5数据库设计…

vba发送邮件功能实现方法:如何调试测试?

vba发送邮件的配置步骤流程?vba发送邮件的安全指南? VBA是一种常用于自动化Office应用程序的编程语言。利用VBA发送邮件功能,用户可以实现自动化发送邮件的任务,无需手动操作。AokSend将详细探讨如何通过调试与测试来确保VBA发送…

ThreadLoad如何防止内存溢出

优质博文:IT-BLOG-CN 从 ThreadLocalMap看 ThreadLocal使用不当的内存泄漏问题 【1】基础概念 : 首先我们先看看ThreadLocalMap的类图,我们知道 ThreadLocal只是一个工具类,他为用户提供get、set、remove接口操作实际存放本地变…

MT7621+MT7915(MT7905)+MT7975 (W7621A6G-SDK)编译固件与升级固件方法

一、搭建开发环境,编译固件。 1、安装在Ubuntu 14.04.5 x86_64系统后,然后安装下面命令行。 $ sudo apt-get install git g make libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip wget python xz-utils vim zlibc zlib1g zlib1g…

XSS---DOM破坏靶场复现

目录 一、OK,Boomer 一、网址: 二、源码分析: 三、 解决思路: 1.页面中的元素可以通过id和name直接取出来 2.覆盖 3.覆盖方法 四、ToString 五、setTimeout函数 六、使用框架白名单 七、成功绕过 ​编辑 二、案例分析…

才来鱼厂实习 1 个月,就转正了!

大家好,我是程序员鱼皮。昨天,我给才来我们公司 实习一个月 的前端开发同学转正了,直接发了正式 Offer!这个转正速度,放眼到所有公司中,我相信也是炸裂的。 看小伙子那么激动,让我回想到了 19 年…

认识 bufferbloat

很多人并不理解 bufferbloat 的本质,我引用《计算机网络-自顶向下方法(第 8 版)》第四章的一个解释: 很形象的比喻,buffer 就像盐,不可或缺,适量增味,过量食物就不能吃了。高血压患者更有所感受&#xff…

STM32是基于ARM架构的,那么ARM究竟是什么呢?

一、什么是ARM 首先,ARM是一家英国公司,全称Advanced RISC Machines,高级精简指令集机器,RISC意味着是精简指令集的芯片。同时也有复杂指令集CSIC的芯片,如X86,常以Intel和AMD为主。 其次,之后…

如何跳过极狐GitLab 密钥推送保护功能?

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

vue 子组件全局自动导入,不在需要每个组件import

main.js import vue from vue import App from ./App.vue import axios from axios axios.defaults.baseURL HTTP://LOCALHOST:3000/api/ Vue.prototype.$http axios; vue config.productionTip false; //子组件全局自动导入 const requireComponents require.cont…

MK米客方德推出新一代工业级SD NAND——更长寿命、更高速度、更优功耗

博客目录 关注我,不迷路,共学习,同进步一、产品封装与兼容性二、SLC 存储颗粒的使用三、高性能 IOPS 表现四、智能健康监测功能五、内嵌 ECC 校验、坏块管理和其他保护机制六、低功耗设计总结 作为 SD NAND 领域的领跑者,MK 米客方…

【Chromium】分享一个网址 Chromium Browser Snapshots

利用 Chromium Browser Snapshots 进行开发和调试 author: jwensh & chatgpt date:20240819 文章目录 利用 Chromium Browser Snapshots 进行开发和调试1. 获取最新的浏览器特性2. 测试和调试浏览器兼容性问题3. 开发和测试浏览器扩展4. 安全研究和漏洞分析5. 提前为新特性…

如何一键删除iPhone相册所有照片

拍照已成为我们记录日常生活的常态。但是,大量照片便会积累在设备上,这不仅占用了大量存储空间,而且随着时间的推移,管理这些照片也变得越来越困难。如果你决定清理旧照片,或者出于隐私考虑需要删除所有照片&#xff0…

2024:AI新纪元,轻松打造你的专属AI助手

引入 在数字化时代的潮流中,人工智能已经成为了我们生活中不可或缺的一部分。2024年被誉为“AI元年”,这不仅是因为人工智能技术的飞速发展,更是因为它已经渗透到我们的日常生活中,为我们带来了无数便利和可能性。在这个充满活力…

FPGA使用笔记:GPIO操作方式(用于测试设备io驱动性能)

一、前言 使用FPGA测试IO速率,用于后续驱动高速AD/DA等高速芯片做铺垫,很多芯片的驱动都是使用并行接口,不是使用专用接口的,这样采样速率的快慢就有CPU的时许周期决定了。 本文测试FPGA和STM32,后续如果用到更快的芯…

探索大模型时代:全面解析Agent智能体的奥秘

前言: 在2024年,大模型圈子的Agent是一个绝对热门的话题,agent也被各种各样的公众人物所追捧 Agent智能体能够最大化的激发大模型潜能还有人说agent智能体式大模型时代的APP,也有人说agent是在toB场景落地的主要方式之一 无论任…

信创(国产化)方案

信创 信创,即信息技术应用创新,旨在实现信息技术自主可控 openEuler openEuler是一款开源、免费的操作系统,由openEuler社区运作,前身为运行在华为公司通用服务器上的操作系统EulerOS。openEuler作为一款开源、免费的操作系统&…

QT6.0如何开启白名单保活

1. 概述 使用Qt开发android应用往往会存在这样一个问题:我们的android应用和后台需要时刻保持通信,但是往往我们在切换任务或者息屏,将我们开发的应用变更为后台应用的时候,由于android的电池策略,会将后台的应用关闭掉从而释放资源供其他应用使用.会给应用带来不好的使用…