今天开始介绍的另一种重要的数据类型——字典()。顾名思义,就是像字典一样,根据“单词”查找“解释”的一种数据结构。在里,“单词”就是索引,叫键(Key),“解释”就是值(Value)。
字典是无序的(不像列表,不支持序列操作,如下标索引index、切片slice等)不能用位置0,1,2, …来索引,只能通过键名来索引。这一特点,非常适合给物品的属性建模,在数学上适合给稀疏数据结构建模。
字典在本质上,是建立了一个hash表,存放着键和指向数据的指针(地址)。优化了hash查找算法,使得查找键的速度非常快。
如何定义一个字典?
例如,我们描述一个,
name : BUF
area : 1um2
delay : 1ns
那么,我们用的字典就可以表示成,
= {‘name’:’BUF’, ‘area’:’1um2′, ‘delay’:’1ns’}
这就是定义字典的一个例子,语法上,把冒号:分隔的键值对(key:value pairs)用逗号分开,再用大括号{}括在一起。
第二种定义方法,调用字典类的构造函数dict(**)。如,
= dict(name=’BUF’, area=’1um2′, delay=’1ns’)
这种方法就像函数传参数一样。
在大部分情况下,在字典定义的时刻并不知道所有的数据, 所以最常用的方法还是像下面这样:
= {}
[‘buf0’] = ‘0.2um2’ #注意,这里是方括号[]
[‘buf1’] = ‘0.6um2’
随着读入外部文件的一行行的解析,逐渐的构建字典。
字典有哪些操作?
最基本的操作就是根据索引(用方括号)取值,如
[‘buf0’]
还有一种根据索引取值的方法,用get()函数,如
.get(‘buf0’)
注:get()函数,当键不存在时,返回空None。如果希望当键不存在时,返回一个默认值,可以这样用:.get(‘buf2’, ‘0um2’),这有时候很有用。
用len()计算字典的元素个数,如
len()
修改元素的值,如
[‘buf0’] = ‘0.3um2’
#{‘buf0′:’0.3um2’, ‘buf1′:’0.6um2’}
另一种方法是用()函数,如
= {‘buf0′:’0.4um2’, ‘buf2′:’0.8um2’}
.()
#{‘buf0′:’0.4um2’, ‘buf1′:’0.6um2’, ‘buf2′:’0.8um2’}
这种方法可以一次更新多个值,甚至增加新的键值对。
删除元素用pop(),如,
.pop(‘buf0’) #{‘buf1′:’0.6um2’, ‘buf2′:’0.8um2’}
还有清空函数clear(),如,
.clear() #{}
分别提取字典的键和值的列表:keys()、()
.keys() #[‘buf0’, ‘buf1’]
.() #[‘0.3um2’, ‘0.6um2’]
keys()可以配合for循环对字典有序输出,在后面介绍循环的时候会重点介绍。
最后介绍判断键是否存在的操作in,这是一个关键字,不是函数。如
‘buf0’ in
如果存在返回True,不存在返回False。一般配合if条件语句来用,后面介绍条件语句时有重点介绍。
字典与列表的异同?
通过上面的介绍,可以看出字典与列表有两个相同点:可变长度和可修改。
整理下字典与列表的异同点:
字典
列表
序列
无序,通过键来索引
有序,用位置来索引。支持序列操作,如slice。
可变长度
是
是
可修改
是
是
常用函数
get, keys, , pop, , clear等
count, , index, , pop, , , sort, clear等
与其它编程语言的异同?
最后我们用表格来整理一个字典、perl哈希、tcl字典、C哈希的区别,方便大家学习:
字典
perl哈希
tcl字典
C哈希
定义
d = {‘name’:’bill’}
my %d = (‘name’=>’bill’);
set d [dict name ‘bill’]
c语言本身不自带(一般是基于“结构体+链表”从零开始码)
判断是否存在键
‘name’ in d
$d{‘name’}
dict $d name
自己写函数实现
是否可变长
是
是
是
是
常用操作
get, keys, , pop, , clear
仅有keys, , , 等
, , , , for, get, incr, info, keys, , merge, ,
set, size, unset, , , with
(函数最丰富)
自己写函数实现
到此为止,主要的数据类型我们就介绍完了。剩下的其它类型如,文件、集合等后面实际用到时再作介绍。
下一次我们将进入下一个章节,介绍语句(if else、for、while)。
——————–
欢迎关注. 分享芯片数字集成电路设计中的经验和方法。ther.
加入IP合伙人(站长加盟) | 全面包装你的品牌,搭建一个全自动交付的网赚资源独立站 | 晴天实测8个月运营已稳定月入3W+
限时特惠:本站每日持续更新海量内部创业教程,一年会员只需98元,全站资源免费无限制下载点击查看会员权益
站长微信: qtw123cn
