创建 dict 的几种方法学习小结
创建 dict 的几种方法学习小结
dict(全称 dictionary,可以翻译为“字典”),其使用“键-值(key-value)”对儿的方式存储多项数据,是一个无序可变的集合。
dict 的创建可以有多种方式:
1. 通过直接赋值方式创建
- 创建空字典
- 创建指定内容的字典
2. 使用 dict 关键字创建
- 创建空字典
- 通过传入关键字(**kwargs)方式创建
- 通过传入 映射(mapping)对象创建
- 通过传入可迭代(iterable)对象创建
3. 使用 fromkeys() 方法创建并初始化字典
4. 使用 “生成式” 方法创建字典
1. 直接赋值创建
# 新建一个空白的字典
c1 = {}# 新建一个指定内容的字典
c2 = {'name': 'Jonah', 'age': '14'}
2. 使用 dict 关键字创建
首先在 PyCharm 中打开 dict 类的说明(简单打开方法为:输入 dict 后,按下键盘 Ctrl 键,同时鼠标移动到 该关键字上方,待其样式变为超链后点击即可)。自动打开 builtins.py 文件的 dict 类定义位置,由于Python 的核心代码为C语言编写,此处是看不到真正源码的,但是我们可以看到其文档描述信息。
创建 dict 类的对象可以通过文档描述中的四种方式实现:
- dict(),创建空白的字典。
- dict(**kwargs),通过关键字参数方式创建。
- dict(mapping),通过传入映射类型对象方式创建。
- dict(iterable),通过传入可迭代对象方式创建。
文件:builtins.py
class dict(object):def __init__(self, seq=None, **kwargs): # known special case of dict.__init__"""dict() -> new empty dictionarydict(mapping) -> new dictionary initialized from a mapping object's(key, value) pairsdict(iterable) -> new dictionary initialized as if via:d = {}for k, v in iterable:d[k] = vdict(**kwargs) -> new dictionary initialized with the name=value pairsin the keyword argument list. For example: dict(one=1, two=2)# (copied from class doc)"""pass
另外,输入dict()后,按下 Ctrl键后,鼠标移动到此处并悬停后也会弹出相关提示信息。
(1) 创建空白的 dict
c1 = dict()
print(c1)----------
输出: {}
(2) 通过关键字参数方式创建
分别把每个传入参数的名称作为字典的“键”,传入参数的值作为字典的“值”使用。
c1 = dict(name='Jonah', age=14)
print(c1)-----------------------------
输出:{'name': 'Jonah', 'age': 14}
(3) 通过传入可迭代对象方式创建
我们知道,如列表、元组、字符串等都属于可迭代对象,可迭代对象的特点是其实现了__iter__方法,在使用 dict 关键字创建字典的时候,也可以传入一个可迭代的对象来实现。但是此对象中的每个元素都要求是包含两个对象的元组方式。
如: [('name', 'Jonah'), ('age', '14')]
或: {('name', 'Jonah'), ('age', '14')}
# 新建一个列表(list)类型的可迭代对象
it1 = [('name', 'Jonah'), ('age', '14')]# 方法1:通过循环赋值的方式生成字典
dic1 = {}
for k, v in it1:dic1[k] = v
print(dic1)# 方法2:直接通过可迭代的对象生成字典
dic2 = dict(it1)
print(dic2)------------------------
输出结果相同,二者是等价的,只是实现方法不同而已:
{'name': 'Jonah', 'age': '14'}
{'name': 'Jonah', 'age': '14'}
(4) 通过传入映射对象方式创建
通过“名称”来引用对应“值”的数据结构称为映射(mapping),dict 本身就是一种映射结构。所以可以直接将一个“字典”当作参数传入给另一个“字典”。
将一个“字典(dict)”以参数的方式传入另一个“字典(dict)”
# 先定义一个 dict1 备用
dic1 = {'name': 'Jonah', 'age': '14'}# 1. 新建一个字典 dict,其参数中传入前面备用的 dic1
dic2 = dict(dic1)
print(dic2)# 2. 新建一个字典 dict,传入:dic1 + 关键字参数
dic3 = dict(dic1, gender='男')
print(dic3)---------------------------------
输出:
{'name': 'Jonah', 'age': '14'}
{'name': 'Jonah', 'age': '14', 'gender': '男'}
另外,Python 中还提供了 map 和 zip 相关的对象方法,以生成 mapping 对象,这类的 mapping 对象也可以当参数传入并生成 dict 对象。
- map():根据提供的函数对指定序列做映射。
- zip():将可迭代的对象作为参数,将其中对应的元素打包成多个元组,然后返回由这些元组组成的列表。
通过 map 方式创建字典
# 先定义一个函数,用于组合成一个“键值对”的映射关系
def f(k, v):return (k, v)# 定义两个可迭代对象,分别提供 “键值对” 里面的 “键” 和 “值”
lst = list('ABCDE')
num = range(1, 6)# map方法,循环遍历两个可迭代对象,经过 f() 函数处理后,生成映射关系对象
m = map(f, lst, num)# 将映射对象当作参数,生成字典
d = dict(m)
print(d)====================
输出:{'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
通过 zip 方式创建
# 定义两个可迭代对象
lst = list('ABCDE')
num = range(1, 6)# 将二者一一对应,组成元组列表(存储了映射关系)
m = zip(lst,num)# 新建字典
d = dict(m)
print(d)====================
输出:{'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
3. 通过fromkeys() 方法创建字典
fromkeys() 函数用于创建一个新字典,以第一个序列参数中的元素做字典的“键”,以第二个参数为字典所有键对应的初始“值”,相当于给字典中的所有键一个相同的初始值。
d1 = dict.fromkeys('ABCD', 0)
print(d1)--------------------
输出:{'A': 0, 'B': 0, 'C': 0, 'D': 0}
4. 使用“生成式”创建字典
在 Python 中,通过“生成式(comprehensions)”对可迭代对象进行循环处理,可以简单快速的生成一个新的字典。 其语法格式如下:
{ 键_表达式 : 值_表达式 for 表达式 in 可迭代对象 }
d1 = {i: chr(i) for i in range(65, 69)}
print(d1)------------------------
输出:{65: 'A', 66: 'B', 67: 'C', 68: 'D'}
小结
将以上各种方式进行整理如下:
# 1. 直接赋值
dict1 = {}# 2. 直接赋值
dict2 = {'name': 'Jonah', 'age': '14'}# 3. dict() 方式
dict3 = dict()# 4. dict(**kwargs) 方式
dict4 = dict(name='Jonah', age=14)# 5. dict(iterable) 方式
lst = [('name', 'Jonah'), ('age', '14')]
dict5 = dict(lst)# 6. dict(mapping) - zip 方式
zp = zip('ABCD', range(1, 5))
dict6 = dict(zp)# 7. dict(mapping) - map 方式
mp = map(lambda x, y: (x, y), 'ABCD', range(1, 5))
dict7 = dict(mp)# 8. dict + kw 方式
d1 = {'name': 'Jonah'}
dict8 = dict(d1, age='14')# 9. fromkeys 方式
dict9 = dict.fromkeys('ABCD', 0)# 10. 生成式方式
dict10 = {i: chr(i) for i in range(65, 69)}
创建 dict 的几种方法学习小结相关推荐
- Java学习笔记:创建线程的两种方法
Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程
- mysql创建库几种方法_MySQL创建数据库的两种方法
本文为大家分享了两种mysql创建数据库的方法,供大家参考,具体内容如下 第一种方法:使用 mysqladmin 创建数据库使用普通用户,你可能需要特定的权限来创建或者删除 mysql 数据库. 所以 ...
- Java 创建线程的三种方法比较
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...
- 创建JAVASCRIPT对象3种方法
创建JAVASCRIPT对象3种方法 方法一:直接定义并创建对象实例 var obj = new Object(); //创建对象实例 //添加属性obj.num = 5; //添加属性 o ...
- 【 Thread】创建线程的2种方法
(一)Thread类 1.结构 java.lang.Object |---java.lang.Thread 2.创建线程的两种方法 (1)一种方法是将类声明为Thread的子类,该子类应重写Threa ...
- oracle中pdb,Oracle12c数据库创建pdb的3种方法
Oracle12c数据库创建pdb的3种方法 1.根据seed创建pdb CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFI ...
- Spark创建DataFrame的三种方法
跟关系数据库的表(Table)一样,DataFrame是Spark中对带模式(schema)行列数据的抽象.DateFrame广泛应用于使用SQL处理大数据的各种场景.创建DataFrame有很多种方 ...
- Java中创建数组的几种方法
Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...
- python process 函数_Python Process创建进程的2种方法详解
前面介绍了使用 os.fork() 函数实现多进程编程,该方法最明显的缺陷就是不适用于 Windows 系统.本节将介绍一种支持 Python 在 Windows 平台上创建新进程的方法. Pytho ...
最新文章
- mysql输出非零列_如何只提取mysql和php中具有非零值的列?
- C#程序员的春天之从零开始学习unity3D游戏开发入门教程二(创建项目及基本面板介绍)...
- WebStorm10.0.4 Live Edit与Google浏览器实时无刷新自动加载页面
- 花式看超级碗 人工智能、大数据在碗里
- 无法启动parallels 缺少必要组件_Parallels 体验 Manjaro 19 (Xfce)
- 认识网络、几种常用的网络拓扑图
- qq连连看分析编写简单辅助
- POJO类toString()方法
- 推荐几个在线SQL编程的网站,良心!
- 蓝牙耳机哪款音质好?高人气低延迟十五款游戏蓝牙耳机推荐
- python vtk_Python vtk.vtkRenderer方法代码示例
- 信度spss怎么做_Spss详细图文教程——问卷信度和效度检验步骤图解
- 人工智能粒子群优化和群智能
- IE地址栏的最大长度
- camera 添加外挂pmic进行供电的涉及
- 关于 Alpine Docker 镜像漏洞 CVE-2019-5021
- 在SQL Server 2008上遇到了删除作业失败的问题。 547错误
- iptables场景一(上)
- 说话人识别的特征选取
- 苹果微信分身版ios_苹果手机怎么下载微信分身