资讯专栏INFORMATION COLUMN

[零基础学Python]字典,你还记得吗?

galaxy_robot / 1827人阅读

摘要:字典,这个东西你现在还用吗随着网络的发展,用的人越来越少了。最早的名字叫伍记小字典,但未能编纂完成。新华字典由商务印书馆出版。成为迄今为止世界出版史上最高发行量的字典。也被称为关联数组或哈希表。

字典,这个东西你现在还用吗?随着网络的发展,用的人越来越少了。不少人习惯于在网上搜索,不仅有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)而直接访问在内存存储位置的数据结构。也就是说,它通过把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45287.html

相关文章

  • [基础python]玩转字符串(1)

    摘要:操练一下字符串吧。它是在告诉计算机,它里面包裹着的是一个字符串。连接字符串方法在中按照下面方法操作老齐教老齐教这是一种最简单连接两个字符串的方法。请看官字符编码就知道了。 如果对自然语言分类,有很多中分法,比如英语、法语、汉语等,这种分法是最常见的。在语言学里面,也有对语言的分类方法,比如什么什么语系之类的。我这里提出一种分法,这种分法尚未得到广大人民群众和研究者的广泛认同,但是,我相...

    eechen 评论0 收藏0
  • [基础Python]正规地说一句话

    摘要:语句,遍列列表字符串字典集合等迭代器,依次处理迭代器中的每个元素。与配合使用处理在程序运行中出现的异常情况。表示此行为空,不运行任何操作。在迭代器函数内使用,用于返回一个元素。恭请到上浏览及时更新的教程零基础学 小孩子刚刚开始学说话的时候,常常是一个字一个字地开始学,比如学说饺子,对他/她来讲,似乎有点难度,大人也聪明,于是就简化了,用饺饺来代替,其实就是让孩子学会一个字就能表达。当然...

    Freeman 评论0 收藏0
  • 我是如何基础转行人工智能的(附十问十答)

    摘要:我的决定是学人工智能,当时对这个比较感兴趣。从机器学习学到深度学习再学回机器学习。面试,成功地去公司从事机器学习深度学习方面的基础工作。这个系列不仅仅以学习为目的,目的是为了达到机器学习的工作入门标准。 每个字都是经验所得,都是站在一个零基础的人的角度写的,纯手打+网上优秀资源整合,希望大家能每个字都认真看。 接下来文章会侧重在以下几方面 1、零基础如何进行人工智能的自学(以找工作为目...

    IamDLY 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<