当前位置: 首页 > news >正文

Python 程序设计讲义(47):组合数据类型——字典类型:创建字典

Python 程序设计讲义(47):组合数据类型——字典类型:创建字典

目录

  • Python 程序设计讲义(47):组合数据类型——字典类型:创建字典
    • 一、字典的特征
    • 二、创建字典
        • 1、使用花括号创建字典
        • 2、使用 dict() 函数创建字典
        • (1)通过指定键值对创建字典
        • (2)通过可迭代对象创建字典
        • (3)通过映射函数zip()创建字典

Python 中,字典是常见的序列结构之一。字典与列表类似,也是可变序列,与列表不同的是,字典是无序的可变序列,保存的内容是以键值对的形式存放的。

字典中的每个元素都包含两个部分:即之间用冒号(:)分隔,相邻两个元素用逗号分隔。所有元素放在一对花括号 ({}) 中。

一、字典的特征

Python 字典具有如下特征:

(1)字典是一种可变的容器,可以存储任意类型的数据;

(2)字典中的每个数据都是用键(key) 进行索引,而不像序列可以用下标进行索引;

(3)字典中的数据没有先后关系,字典的存储是无序的;

(4)字典是 Python 中唯一的映射类型,采用键值对(key-value)的形式存储数据。key必须是不可变类型,如:数字、字符串、元组。

(5)字典的表示方式是以花括号({} )括起来,以冒号(:)分割的键值对,各键值对之间用逗号(,)分隔开;

(6)字典的键一般是唯一的,如果重复最后的一个键值对会覆盖换前面的键值对。

二、创建字典

创建字典有两种方式:

1、使用花括号创建字典

使用花括号创建字典的语法格式如下:

d_name={key1:value1, key2:value2, ... ,keyn:valuen}
说明:
花括号内如果不包含键值对,则创建一个空字典。

例如:

d1={}  #创建一个空字典
d2={"张静":25,"李刚":20,"王飞":25,"刘涛":22}
d3={1:"汉族",2:"回族",3:"朝鲜族",2:"蒙古族",2:"苗族"}
#如果出现重复的键,则最后一个键值对会覆盖前面所有重复的键值对,并且只保留最后一个键值对
print(d1)
print(type(d1))
print(d2)
print(type(d2))
print(d3)
print(type(d3))程序的运行结果为:
{}
<class 'dict'>
{'张静': 25, '李刚': 20, '王飞': 25, '刘涛': 22}
<class 'dict'>
{1: '汉族', 2: '苗族', 3: '朝鲜族'}
<class 'dict'>
2、使用 dict() 函数创建字典

使用 dict() 函数创建字典分为三种情况:

(1)通过指定键值对创建字典

其语法格式如下:

d_name=dict(key1=value1, key2=values, ..., keyn=valuen)
说明:
(1)此处的=为赋值语句,key只能是标识符,并且key不能加引号。
(2)key值不能重复,否则会报错。

例如:

d1=dict(张静=20,刘涛=22,马云云=27,赵强=25)
d2=dict(a1="汉族",a2="回族",a3="蒙古族",a4="朝鲜族",a5="苗族")
#d2=dict(a1="汉族",a2="回族",a3="蒙古族",a4="朝鲜族",a3="苗族")
print(d1)
print(d2)程序的运行结果为:
{'张静': 20, '刘涛': 22, '马云云': 27, '赵强': 25}
{'a1': '汉族', 'a2': '回族', 'a3': '蒙古族', 'a4': '朝鲜族', 'a5': '苗族'}

如果key加引号,则会报错。

例如:

d1=dict("张静"=20,"刘涛"=22,"马云云"=27,"赵强"=25)
print(d1)程序的运行结果为:File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 1d1=dict("张静"=20,"刘涛"=22,"马云云"=27,"赵强"=25)^^^^^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

如果key不是一个标识符,也会报错。

例如:

d2=dict(1="汉族",2="回族",3="蒙古族",4="朝鲜族",3="苗族")
print(d2)程序的运行结果为:File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 3d2=dict(1="汉族",2="回族",3="蒙古族",4="朝鲜族",3="苗族")^^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

这样也不行:

d12=dict((1,2)="汉族")
print(d2)程序的运行结果为:File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 3d12=dict((1,2)="汉族")^^^^^^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

如果key出现重复值,也会报错:

例如:

d2=dict(a1="汉族",a2="回族",a3="蒙古族",a4="朝鲜族",a3="苗族")
print(d2)程序的运行结果为:File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 1d2=dict(a1="汉族",a2="回族",a3="蒙古族",a4="朝鲜族",a3="苗族")^
SyntaxError: keyword argument repeated: a3
(2)通过可迭代对象创建字典

语法格式如下:

d_name=dict(iterable)
说明:
可迭代对象的元素必须是包含两个元素的可迭代对象。

例如:

l1=[[1,"汉族"],[2,"回族"],[3,"蒙古族"],[4,"朝鲜族"],[5,"苗族"]]
t1=((1,"汉族"),(2,"回族"),(3,"蒙古族"),(4,"朝鲜族"),(3,"苗族"))
d1=dict(l1)
d2=dict(t1)
print(d1)
print(d2)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '蒙古族', 4: '朝鲜族', 5: '苗族'}
{1: '汉族', 2: '回族', 3: '苗族', 4: '朝鲜族'}

如果一个列表的元素不是包含两个元素可迭代对象,则使用dict()函数转换时会报如下错误:

l1=[1,"汉族"]
d1=dict(l1)
print(d1)程序的运行结果为:
Traceback (most recent call last):File "C:\Users\wgx58\PycharmProjects\PythonProject\hello.py", line 2, in <module>d1=dict(l1)
TypeError: cannot convert dictionary update sequence element #0 to a sequence
(3)通过映射函数zip()创建字典

通过映射函数zip()创建字典的语法格式如下:

d_name=dict(zip(iterable1, iterable2))说明:
(1zip()函数将可迭代对象作为参数,将对象中对应的元素打包成若干个元组,
返回由这些元组组成的一个可迭代对象。并且zip()函数生成的可迭代对象一旦
被取出就没有了。即:zip()函数生成的可迭代对象只能被使用一次。
(2zip()函数的参数中的两个可迭代对象的元素个数一般要相同。
如果iterable1中的元素个数与iterable2中的元素个数不相等时,
则匹配相同个数的元素。
例如:iterable1有5个元素,iterable2有4个元素,则匹配4个元素。
iterable1有3个元素,iterable2有5个元素,则匹配3个元素。

例如:

l1=[1,2,3,4,5]
l2=["汉族","回族","苗族","蒙古族","朝鲜族"]
d1=dict(zip(l1,l2))
print(d1)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '苗族', 4: '蒙古族', 5: '朝鲜族'}

iterable1中的元素个数大于iterable2中的元素个数时:

l1=[1,2,3,4,5,6,7]
l2=["汉族","回族","苗族","蒙古族","朝鲜族"]
d1=dict(zip(l1,l2))
print(d1)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '苗族', 4: '蒙古族', 5: '朝鲜族'}

iterable1中的元素个数小于iterable2中的元素个数时:

l1=[1,2,3]
l2=["汉族","回族","苗族","蒙古族","朝鲜族"]
d1=dict(zip(l1,l2))
print(d1)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '苗族'}

zip()函数生成的可迭代对象只能使用一次。

例如:

l1=[1,2,3,4,5]
l2=["汉族","回族","苗族","蒙古族","朝鲜族"]
zipobj=zip(l1,l2)
d1=dict(zipobj)
d2=dict(zipobj)  #d2为空列表,因为zip()函数生成的可迭代对象已经被取出。
print(d1)
print(d2)程序的运行结果为:
{1: '汉族', 2: '回族', 3: '苗族', 4: '蒙古族', 5: '朝鲜族'}
{}
http://www.lryc.cn/news/606090.html

相关文章:

  • MySQL常用函数总结
  • 2025年7月最新一区SCI-基尔霍夫定律优化算法Kirchhoff’s law algorithm-附Matlab免费代码
  • [硬件电路-109]:模拟电路 - 自激振荡器的原理,一种把直流能量转换成交流信号的装置!
  • 专题:2025半导体行业研究报告:从AI芯片到封测突围的生死局|附40+份报告PDF、数据汇总下载
  • Apifox 7 月更新|通过 AI 命名参数及检测接口规范、在线文档支持自定义 CSS 和 JavaScript、鉴权能力升级
  • 鸿蒙拉起系统定位和app授权定位
  • 光伏热斑误检率↓79%!陌讯多模态融合算法在智慧能源的落地优化
  • 当文档包含图文混排表格时,如何结合大模型(如DeepSeek-VL)和OCR提取数据
  • 一次 web 请求响应中,通常那个部分最耗时?
  • Flutter module 是如何被原生 Android 项目通过 Gradle 引入的
  • Flutter Chen Generator - yaml配置使用
  • 原生安卓与flutter混编的实现
  • 是否需要买一个fpga开发板?
  • 嵌入式硬件学习(十)—— LED驱动+杂项设备驱动
  • 【Unity】实现小地图
  • TDengine 中 TDgp 中添加算法模型(异常检测)
  • 【大模型理论篇】跨语言AdaCOT
  • Flutter 页面跳转及传参总结
  • 8.2-使用字符串存储 UTF-8 编码文本
  • RAG:让AI更聪明的“外接大脑“ | AI小知识
  • ECMAScript2023(ES14)新特性
  • C# 基于halcon的视觉工作流-章27-带色中线
  • HTM 5 的离线储存的使用和原理
  • JavaEE初阶1.0
  • 认知绞肉机:个体实践视域下认知暴力与元认知升维的活体实验研究
  • 今日做题练习
  • 记录自己使用gitee和jenkins
  • PHP 核心特性全解析:从实战技巧到高级应用(2)
  • 按键精灵iOS工具元素命令SetText:自动化输入的终极解决方案
  • .NET Core部署服务器