闲话Python编程-字典dict

        在我的Python编程经历中,Python有两大最常用的数据结构:列表list和字典dict,搞明白了这两个数据结构的所有知识点,日常编程基本不成问题了。列表list在前面专题已经详细讲过,本章来着重讲解字典dict的用法。

1. 定义与创建

        字典dict是一个映射的类型, 它也是一个容器,容器里面是一个个key和value的映射对象,比如:{100: 'aaaa',  200: 'bbb'} 或者 {'Tom':  20, 'Jack': 21}。

        字典dict的key需要是一个可Hashable的对象,这需要去了解Hash是什么:

        Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。比如把字符文本映射为一个整型值,或者把任意长度的文本映射成一个固定长度的字符串,在文件下载时我们常常会发现同时提供了一个文件Hash值,就是让我们下载完文件后对文件内容做Hash,以便和下载网站提供的Hash值进行对比来判断下载文件是否完整。

        是不是Python里面所有对象都是可Hashable的呢,不是!一个对象是可Hashable的,那是需要它实现了__hash__()内置函数,在它的生命周期内它的Hash值是不会变的。这么讲还是比较抽象,那直接从实际例子中讲:

  1.  大部分Python不可修改的内嵌对象都是可Hashable的:比如整型值,字符串。
  2.  不可修改的容器tuple和frozenset是可Hashable,当然同时还需要它们的元素是可Hashable的。
  3.  用户定义的类实例,默认也是可Hashable的。
  4. 反之,可修改的容器如list和dict就不是可Hashable的。

        字典dict对key要求是可Hashable的,对value值却不需要,任何对象都可以。

        我们来看看字典dict的几种创建方式:

  1. 用冒号分隔的key:value列表:{100: 'aaaa',  200: 'bbb'}、{'Tom':  20, 'Jack': 21}
  2. 空字典:{}
  3. 用for循环构造:{x: x ** 2 for x in range(10)}
  4. 用内置函数dict()进行构造:

         dict()

   dict([('foo', 100), ('bar', 200)])

   dict(foo=100, bar=200)

   dict({'one': 1, 'three': 3}, two=2)

         dict(zip(['one', 'two', 'three'], [1, 2, 3]))

        最后来一点测试验证代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 练习dict# 创建dict
def create_dict():d1 = {}print('d1:', d1)d2 = dict()print('d2:', d2)d3 = {100: 'aaaa', 200: 'bbb'}print('d3:', d3)d4 = {x: x ** 2 for x in range(10)}print('d4:', d4)d5 = dict(one=1, two=2, three=3)print('d5:', d5)d6 = dict([('one', 1), ('two', 2), ('three', 3)])print('d6:', d6)d7 = dict({'one': 1, 'two': 2}, three=3)print('d7:', d7)d8 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))print('d8:', d8)def main():create_dict()if __name__ == '__main__':main()

2. 操作

        字典dict也是一个容器类型,里面存储管理键值对的元素,基础的操作必定是增、删、查、改。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 练习dict# 创建dict
def create_dict():d1 = {}print('d1:', d1)d2 = dict()print('d2:', d2)d3 = {100: 'aaaa', 200: 'bbb'}print('d3:', d3)d4 = {x: x ** 2 for x in range(10)}print('d4:', d4)d5 = dict(one=1, two=2, three=3)print('d5:', d5)d6 = dict([('one', 1), ('two', 2), ('three', 3)])print('d6:', d6)d7 = dict({'one': 1, 'two': 2}, three=3)print('d7:', d7)d8 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))print('d8:', d8)# 操作dict
def operate_dict():info = {'Jack': 15, 'Tom': 16}print(info)# 新增: key不存在info['Alic'] = 14print(info)# 修改: key已经存在info['Jack'] = 17print(info)# 删除del info['Jack']print(info)# 判断元素是否存在if 'Alic' in info:print('Alic is in ', info)if 'Black' not in info:print('Black is not in ', info)# 获取指定key的值,如果key不存在,则执行抛出异常KeyErrorx = info['Alic']print("info['Alic']=", x)# 同样是获取值,但是当key不存在时,会返回None, 而不会异常x = info.get('Jack')print("info['Jack']=", x)# 遍历for k, v in info.items():print('key=', k, ', value=', v)for k in info.keys():print('key=', k)for v in info.values():print('value=', v)# 清空info.clear()print(info)def main():#create_dict()operate_dict()if __name__ == '__main__':main()

        上面代码中operate_dict()函数把常见的操作练习了一遍,dict还有其它的方法,使用很简单,自行查官网资料。

3. 结束语

        Python语言库支持的数据结构最重要最常用的就是序列和字典两个了,用好了它们基本解决了大部分的数据结构需求,字典dict适合具有键值映射关系的数据结构需求的场景。

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

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

相关文章

区块链实验室(27) - 区块链+物联网应用案例

分享最新的区块链物联网应用案例:HPCLS-BC

【Kafka专题】Kafka快速实战以及基本原理详解

目录 前言课程内容一、Kafka介绍1.1 MQ的作用1.2 为什么用Kafka 二、Kafka快速上手2.1 实验环境2.2 单机服务体验2.3 认识Kafka模型架构2.4 Kafka集群2.5 理解服务端的Topic、Partion和Broker2.6 章节总结:Kafka集群的整体结构 三、Kraft集群(拓展&#…

集群-Nacos-2.2.3、Nginx-1.24.0集群配置

Nacos集群 高可用 Nginx 集群Nacos 集群(至少三个实例)高可用数据库集群(取代 Nacos 内嵌数据库) Nacos 集群搭建 集群使用版本: Nginx 1.24.0 Nacos 2.2.3 服务器IP服务器版本Nginx18.18.18.40CentOS-7.9MySQL18.18.…

【计算机网络笔记七】应用层(四)HTTP 通过Content-Type提交数据的方式

1. Content-Type: application/x-www-form-urlencoded 表示纯文本表单提交方式 格式如下: POST /users HTTP/1.1 Host: api.github.com Content-Type: application/x-www-form-urlencoded Content-Length: 27namezhangsan&gendermale 对应的 Retrofit 代码:…

如何安装并启动jupyter notebook

jupyter是什么 Jupyter Notebook 可以使用多种语言(Python、R、Julia 等)开发交互式笔记本,因此,它会依赖于不同的包和库。但是,对于 Jupyter Notebook 的 Python 版本,以下是一些主要的依赖项&#xff1a…

样品运输与贮存

声明 本文是学习GB-T 42959-2023 饲料微生物检验 采样. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了以微生物检验为目的的采样原则、采样人员、设备和材料、采样方案、采样步骤和采样 报告。 本文件适用于以微生物检验为目的…

flutter开发实战-webview插件flutter_inappwebview使用

flutter开发实战-webview插件flutter_inappwebview使用 在开发过程中,经常遇到需要使用WebView,Webview需要调用原生的插件来实现。常见的flutter的webview插件是webview_flutter,flutter_inappwebview。之前整理了一下webview_flutter&…

手机投屏到笔记本电脑小方法

1、我们可以开启Windows自带的投影功能,将我们的手机和电脑连接同一个无线网络。 2、在电脑开始菜单栏里找到设置选项并打开。 3、我们进入之后找到系统选项,点击进去之后找到点击投影到这台电脑,接下来我们将默认的始终关闭的下拉选项更改为…

国庆作业6

TCP服务器 #include "head.h" #define PORT 2580 //端口号 #define IP "192.168.31.219" //本机IP int main(int argc, const char *argv[]) {sqlite3* dbNULL;if(sqlite3_open("./my.db",&db)!SQLITE_OK){fprintf(stde…

257. 二叉树的所有路径

257. 二叉树的所有路径 原题 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode…

OpenGl材质

在现实世界里,每个物体会对光产生不同的反应。比如,钢制物体看起来通常会比陶土花瓶更闪闪发光,一个木头箱子也不会与一个钢制箱子反射同样程度的光。有些物体反射光的时候不会有太多的散射(Scatter),因而产生较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的…

python 使用 scapy 扫描内网IP或端口

地址信息在IP层, 可以利用 ICMP 或 ARP 协议数据包探测IP信息. ICMP协议可以利用ping工具发送数据包, 但是防火墙有可能禁止ICMP, 无法有效探测, 可以考虑使用ARP探测. 利用ICMP协议探测内网IP def ping_ip(ip_fex):# 扫描范围: 128~254for i in range(128, 255):ip f{ip_fe…

匿名上位机V7波形显示教程-简单能用

匿名上位机V7波形显示教程-简单能用 匿名上位机V7下位机数据格式根据匿名上位机V7的手册说明文档,编写对应的指令在主函数中初始化ANDmessage驱动连接匿名上位机V7 匿名上位机V7下位机数据格式 DATA区域内容: 举例说明DATA区域格式,例如上文&…

910数据结构(2020年真题)

算法设计题 问题1 现有两个单链表A和B,其中的元素递增有序,在不破坏原链表的情况下,请设计一个算法,求这两个链表的交集,并将结果存放在链表C中。 (1)描述算法的基本设计思想; (2)根据设计思想,给出C语言描述算法,关键之处请给出简要注释。 (1)基本思想:A、B两个…

【数组及指针经典笔试题解析】

1.数组和指针笔试题 题目1 int main(){int a[5] { 1,2,3,4,5};int * ptr (int * )(&a 1);printf("%d,%d",*(a 1),*(ptr - 1));return 0;}图文解析: int * ptr …

selenium京东商城爬取

该项目主要参考与:http://c.biancheng.net/python_spider/selenium-case.html 你看完上述项目内容之后,会发现京东登录是一个比较坑的点,selenium控制浏览器没有登录京东,导致我们自动爬取网页被重定向到京东登录注册页面。 因此,我们要单独…

VC++父进程交互式操作子进程标准输入输出

父进程接管子进程的标准输入输出和错误,实现对子进程的交互操作。比如子进程是一个类似mysql这种可以交互的命令,执行操作后输出结果,父进程根据结果分析决定执行下一步的命令,从而替代人工的输入。 通过父进程创建子进程,使用管道重定向子进程的输入输出错误可以实现 在 …

数据结构与算法——19.红黑树

这篇文章我们来讲一下红黑树。 目录 1.概述 1.1红黑树的性质 2.红黑树的实现 3.总结 1.概述 首先,我们来大致了解一下什么是红黑树 红黑树是一种自平衡的二叉查找树,是一种高效的查找树。红黑树具有良好的效率,它可在 O(logN) 时间内完…

P1541 [NOIP2010 提高组] 乌龟棋

[NOIP2010 提高组] 乌龟棋 - 洛谷 #include<bits/stdc.h> using namespace std; const int N41; int f[N][N][N][N],num[351],g[5],n,m,x; int main() {scanf("%d %d",&n,&m);for(int i1;i<n;i)scanf("%d",&num[i]);f[0][0][0][0]nu…

解决u盘在我的电脑中重复显示两个

删除注册表&#xff1a; [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\DelegateFolders\{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}]