Python学习笔记之字典

2016-03-07  本文已影响81人  狗子渣渣

字典是Python语言中唯一的映射类型。字典在某些语言中被称为联合内存或者联合数组。序列是以连续的整数为索引,而字典是以关键字为索引的,关键字可以是任何不可变类型的。

字典(dict)

字典是Python语言中唯一的映射类型。字典在某些语言中被称为联合内存或者联合数组。序列是以连续的整数为索引,而字典是以关键字为索引的,关键字可以是任何不可变类型的。字典类型和序列类型容器类(列表、元组)的区别在于两者的存储和访问数据的方式不同。序列类型只能用数字类型的键,映射类型可以用任何不可变类型的对象,一般情况下是用字符串做键。映射类型中的数据是无序排列的。序列类型用有序的数字键做索引将数据以数组的形式存储。

映射类型通常被称为哈希表是因为字典对象就是哈希类型的。

哈希表中储存的每一条数据叫做一个值(value),是根据与它相关的一个被称为键(key)的数据项进行储存的。哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中来储存值。任何一个值存储的地址皆取决于它的键。我们可以用items()方法得到包含键、值对的元组的列表来排序。

字典的创建

我们可以把字典看作无序的键:值对集合,键必须互不相同,一对大括号{}创建一个空字典。初始化字典时,在大括号内放置一组逗号分隔的键:值对。

>>> dict1 = {}
>>> dict2 = {'name':'Joe','age':20}
>>> dict1,dict2
({}, {'age': 20, 'name': 'Joe'})

字典的访问

我们一般可以通过dictname[key]来访问字典的值对或者通过迭代器来访问。

>>> dict2['age']
20
>>> for key in dict2:
    print 'key = %s, value = %s' % (key,dict2[key])


key = age, value = 20
key = name, value = Joe

字典的更新

我们可以通过dictname[key]来更新字典的值对,通过del语句删除某一个键:值对。

>>> dict2['name'] = 'Bob' # 替换条目
>>> dict2
{'age': 20, 'name': 'Bob'}
>>> dict2['sex'] = 'male' # 添加条目
>>> dict2
{'age': 20, 'name': 'Bob', 'sex': 'male'}
>>> del dict2['sex']  # 删除条目
>>> dict2
{'age': 20, 'name': 'Bob'}

字典操作符

字典类型操作符除了不支持拼接(+)和重复(*)这样的操作,其他操作和序列操作几乎一样。

基本操作符

由于字典类型操作符和序列操作符几乎一样,这里不做说明。

>>> dict3 = {'abc':123}
>>> dict4 = {'abc':456}
>>> dict5 = {'abc':123,456:789}
>>> dict6 = {'xyz':123}
>>> dict3 > dict4
False
>>> (dict4 < dict5) and (dict4 < dict6)
True
>>> 'abc' in dict3
True
>>> 'abc' in dict6
False

字典的比较

由于字典的比较比较复杂,所以这里单独说明。对于字典来说,cmp()方法比较的算法是按照先比较字典的长度,再比较字典的键,最后比较字典的值对。

比较字典的长度

如果字典的长度不同,那么用cmp(dict1,dict2)比较大小时,如果字典dict1比dict2长,cmp()返回正值,反之负值。

>>> cmp(dict3,dict5)
-1
>>> cmp(dict5,dict4)
1

比较字典的键

如果字典的长度相同,那么就会按照字典的键比较。

>>> cmp(dict3,dict6)
-1

比较字典的值对

如果字典的长度和键都相同的情况下,就会按照字典的值对进行比较。

>>> cmp(dict3,dict4)
-1

hash()函数

hash()函数本身并不是为字典设计的方法,但它可以判断某个队形是否可以做一个字典的键,将一个 对象作为参数传递给hash(),会返回这个队形的哈希值。只有这个对象是可哈希的,才可以作为字典的键。非可哈希类型传递给hash()方法,会产生TypeError错误。

>>> hash(['abc'])

Traceback (most recent call last):
    File "<pyshell#28>", line 1, in <module>
    hash(['abc'])
TypeError: unhashable type: 'list'
>>> hash(('abc',))
594755148

字典的内建方法

代码:

>>> dict1 = {'age': 20, 'name': 'Bob', 'sex': 'male'}
dict2 = {'name': 'Steven','city':'New York','age':24}
>>> dict1.values()
[20, 'Bob', 'male']
>>> dict1.keys()
['age', 'name', 'sex']
>>> dict1.update(dict2)
>>> dict1
{'city': 'New York', 'name': 'Steven', 'age': 24, 'sex': 'male'}
>>> for value in dict1.itervalues():
    print value


Steven
19
female
>>> for key in dict1.iterkeys():
    print key


name
age
sex
>>> for item in dict1.iteritems():
    print item


('name', 'Steven')
('age', 19)
('sex', 'female')
上一篇下一篇

猜你喜欢

热点阅读