网络编程
位置:首页>> 网络编程>> Python编程>> 跟老齐学Python之字典,你还记得吗?

跟老齐学Python之字典,你还记得吗?

作者:hebedich  发布时间:2022-09-07 20:22:53 

标签:跟老齐学Python,字典

字典,这个东西你现在还用吗?随着网络的发展,用的人越来越少了。不少人习惯于在网上搜索,不仅有web版,乃至于已经有手机版的各种字典了。我曾经用过一本小小的《新华字典》。

《新华字典》是中国第一部现代汉语字典。最早的名字叫《伍记小字典》,但未能编纂完成。自1953年,开始重编,其凡例完全采用《伍记小字典》。从1953年开始出版,经过反复修订,但是以1957年商务印书馆出版的《新华字典》作为第一版。原由新华辞书社编写,1956年并入中科院语言研究所(现中国社科院语言研究所)词典编辑室。新华字典由商务印书馆出版。历经几代上百名专家学者10余次大规模的修订,重印200多次。成为迄今为止世界出版史上最高发行量的字典。
这里讲到字典,不是为了叙旧。而是提醒看官想想我们如何使用字典:先查索引(不管是拼音还是偏旁查字),然后通过索引找到相应内容。

这种方法能够快捷的找到目标。

在python中,也有一种数据与此相近,不仅相近,这种数据的名称就叫做dictionary,翻译过来是字典,类似于前面的int/str/list,这种类型数据名称是:dict

依据管理,要知道如何建立dict和它有关属性方法。

因为已经有了此前的基础,所以,学这个就可以加快了。

前面曾经建议看官一个很好的学习探究方法,比如想了解str的有关属性方法,可以在交互模式下使用:


>>>help(str)


将得到所有的有关内容。

现在换一个,使用dir,也能得到相同的结果。只是简单一些罢了。请在交互模式下:


>>> dir(dict)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']


以__(双下划线)开头的先不管。看后面的。如果要想深入了解,可以这样:


>>> help(dict.values)


然后出现:


Help on method_descriptor:

values(...)
    D.values() -> list of D's values
(END)

也就是在这里显示出了values这个内置函数的使用方法。敲击键盘上的q键退回。

概述

python中的dict具有如下特点:

dict是可变的
dict可以存储任意数量的Python对象
dict可以存储任何python数据类型
dict以:key:value,即“键:值”对的形式存储数据,每个键是唯一的。
dict也被称为关联数组或哈希表。
以上诸条,如果还不是很理解,也没有关系,通过下面的学习,特别是通过各种实验,就能理解了。

创建dict

话说创建dict的方法可是远远多于前面的int/str/list,为什么会多呢?一般规律是复杂点的东西都会有多种渠道生成,这也是从安全便捷角度考虑吧。

方法1:

创建一个空的dict,这个空dict,可以在以后向里面加东西用。


>>> mydict = {}
>>> mydict
{}


创建有内容的dict。


>>> person = {"name":"qiwsir","site":"qiwsir.github.io","language":"python"}
>>> person
{'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'}


"name":"qiwsir"就是一个键值对,前面的name叫做键(key),后面的qiwsir是前面的键所对应的值(value)。在一个dict中,键是唯一的,不能重复;值则是对应于键,值可以重复。键值之间用(:)英文的分号,每一对键值之间用英文的逗号(,)隔开。


>>> person['name2']="qiwsir"    #这是一种向dict中增加键值对的方法
>>> person
{'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'}


如下,演示了从一个空的dict开始增加内容的过程:


>>> mydict = {}
>>> mydict
{}
>>> mydict["site"] = "qiwsir.github.io"
>>> mydict[1] = 80
>>> mydict[2] = "python"
>>> mydict["name"] = ["zhangsan","lisi","wangwu"]
>>> mydict
{1: 80, 2: 'python', 'site': 'qiwsir.github.io', 'name': ['zhangsan', 'lisi', 'wangwu']}

>>> mydict[1] = 90 #如果这样,则是修改这个键的值
>>> mydict
{1: 90, 2: 'python', 'site': 'qiwsir.github.io', 'name': ['zhangsan', 'lisi', 'wangwu']}

方法2:


>>> name = (["first","Google"],["second","Yahoo"])   #这是另外一种数据类型,称之为元组,后面会讲到
>>> website = dict(name)
>>> website
{'second': 'Yahoo', 'first': 'Google'}

方法3:

这个方法,跟上面的不同在于使用fromkeys


>>> website = {}.fromkeys(("third","forth"),"facebook")
>>> website
{'forth': 'facebook', 'third': 'facebook'}

需要提醒的是,这种方法是从新建立一个dict。

访问dict的值

因为dict是以键值对的形式存储数据的,所以,只要知道键,就能得到值。这本质上就是一种映射关系。


>>> person
{'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'}
>>> person['name']
'qiwsir'
>>> person['language']
'python'
>>> site = person['site']
>>> print site
qiwsir.github.io

如同前面所讲,通过键能够增加dict中的值,通过键能够改变dict中的值,通过键也能够访问dict中的值。

看官可以跟list对比一下。如果我们访问list中的元素,可以通过索引值得到(list[i]),如果是让机器来巡回访问,就可以用for语句。复习一下:


>>> person_list = ["qiwsir","Newton","Boolean"]  
>>> for name in person_list:
...   print name
...
qiwsir
Newton
Boolean

那么,dict是不是也可以用for语句来循环访问呢?当然可以,来看例子:


>>> person
{'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'}
>>> for key in person:
...   print person[key]
...
qiwsir
qiwsir
python
qiwsir.github.io

知识

什么是关联数组?以下解释来自 *

在计算机科学中,关联数组(英语:Associative Array),又称映射(Map)、字典(Dictionary)是一个抽象的数据结构,它包含着类似于(键,值)的有序对。一个关联数组中的有序对可以重复(如C++中的multimap)也可以不重复(如C++中的map)。
这种数据结构包含以下几种常见的操作:

1.向关联数组添加配对
2.从关联数组内删除配对
3.修改关联数组内的配对
4.根据已知的键寻找配对
字典问题是设计一种能够具备关联数组特性的数据结构。解决字典问题的常用方法,是利用散列表,但有些情况下,也可以直接使用有地址的数组,或二叉树,和其他结构。
许多程序设计语言内置基本的数据类型,提供对关联数组的支持。而Content-addressable memory则是硬件层面上实现对关联数组的支持。
什么是哈希表?关于哈希表的叙述比较多,这里仅仅截取了概念描述,更多的可以到 * 上阅读。

散列表(Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构。也就是说,它通过把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。

0
投稿

猜你喜欢

  • 虽然淘宝商城的名字中带有“商城”两字,但是很显然的,淘宝商城并不是一个B2C商城,淘宝商城仍只是一个C2C平台,充其量只是个收费版的淘宝。在
  • 1.前言面向对象编程的三大特性:封装、继承、多态。可见继承是面向对象程序设计中一个重要的概念。Go 作为面向对象的编程语言,自然也支持继承。
  • 本文实例讲述了JS使用ajax从xml文件动态获取数据显示的方法。分享给大家供大家参考。具体分析如下:下面的JS代码通过ajax检索xml文
  • 某天和一个产品经理聊起:以用户为中心是一个理想概念。经历了太多的项目,看到了太多的限制条件。而我向来不是一个有着设计洁癖的完美主义者。做为所
  • 前言:在转换操作中,我们执行各种操作,例如更改系列的数据类型,将系列更改为列表等。为了执行转换操作,我们有各种有助于转换的功能,例如.ast
  • 基础知识实际上,“运算符重载”只是意味着在类方法中拦截内置的操作……当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的
  • 通过这个布局思路来做一个简单的后台管理系统也是OK的,大家可以参考一下啦!话不多说,还是先来梳理一下需要的第三方模块。PyQ5 的UI界面布
  • 前言微服务中的日志采集方案ELK(EFK)已经是基本事实标准了,但是单体服务中却没有像ELK这样的成熟采集方案,这与单体性质有关,单体毕竟涉
  • 可用性研究表明,当响应时间超过一秒钟时,用户便能够有所察觉。虽然在反馈系统中,当用户需要等待时,更好的解决方案的是应该采用确定性的进度条。但
  • 解决办法: 1.新建一个同名的数据库(数据文件与原来的要一致) 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文
  • 在使用Matlab肯定会碰到Matlab求解数组中的最大值以及它所在的位置的问题。博主开始用循环的方法找,既浪费时间又消耗资源,后面查找后才
  • 本文实例讲述了python实现通过队列完成进程间的多任务功能。分享给大家供大家参考,具体如下:1.通过队列完成进程间的多任务import m
  • 本文实例讲述了python实现下载指定网址所有图片的方法。分享给大家供大家参考。具体实现方法如下:#coding=utf-8#downloa
  • 求N的阶乘本题要求编写程序,计算N的阶乘。输入格式:输入在一行中给出一个正整数 N。输出格式:在一行中按照“produc
  • 本文实例为大家分享了python人民币大小写转换的具体代码,供大家参考,具体内容如下大家应该都知道,银行打印账单有时候会跟上人民币的阿拉伯数
  • 首先安装WSH,NT(SERVER、WORKSTATION)、W2K服务器上需要安装WSH2.0或者更高版本。然后,参照下列代码即可:<
  • 问题描述如下:解决方案如下:下图中字体调整为18及以上效果如下:来源:https://blog.csdn.net/appleyuchi/ar
  • 本文总结了asp初学者在学习asp过程中可能会碰到的常见问题,并做了详细的解答。1.如何用Asp判断你的网站的虚拟物理路径 答:使用Mapp
  • 通常能听到的答案是使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你就知道IS NULL会使用索引.所以上述说法有漏洞.着急的人
  • 百度的资料,保存下来:在写按时间段查询的sql语句的时候 一般我们会这么写查询条件:where date>='2010-01-
手机版 网络编程 asp之家 www.aspxhome.com