美文网首页
Python学习笔记之字典

Python学习笔记之字典

作者: 狗子渣渣 | 来源:发表于2016-03-07 20:18 被阅读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

字典的内建方法

  • dict.keys() 返回一个包含字典中键的列表
  • dict.values() 返回一个包含字典中所有值得列表
  • dict.items() 返回一个包含字典中键、值对元组的列表
  • dict.update(dict1) 将字典dict1的键-值对更新到字典dict中,字典中原有的键如果和新添加的键重复,那么重复键所对应的值对将会覆盖原来的值对,原来不存在的条目将会添加到字典中
  • dict.iter*() iteritems()、iterkeys()、itervalues()返回的是一个迭代子,而不是一个列表。

代码:

>>> 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')

相关文章

  • Python学习笔记之字典

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

  • 读书笔记 | Python学习之旅 Day4

    Python学习之旅 读书笔记系列 Day 4 《Python编程从入门到实践》 第6章 字典 知识点 字典:相互...

  • Python学习-字典(dict)

    查看所有Python相关学习笔记 字典(dict) 字典内元素是无序的 新增(创建)字典(key-value) k...

  • Python学习笔记(六)定制数据对象

    注意:本文是《Head First Python》学习笔记。欢迎关注我的 简书 。 Python术语 “字典”-...

  • Python ☞ day 3

    Python学习笔记之 字符串 & 列表 & 元组 & 字典 字符串 什么是字符串? 字符串运算 字符串方法 列表...

  • Python学习笔记之六-字典

    字典由 键(key) 及相对应的 值(value) 组成,每一个 键-值 对 称为项(item)。每个键与其值之间...

  • Day01自学 - Python 字典(Dictionary)

    学习参考博客地址:Python 字典(Dictionary) | Python 优雅的操作字典 一、创建字典 字典...

  • Python学习笔记--------字典

    字典key可是从字典中取值,但是不会报错字典[key] = value如果key存在,修改数据如果key不存在,新...

  • Python字典学习笔记

    Python3 字典 定义 字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)...

  • Python学习笔记-字典

    1. Python中字典相关基本概念 2. get(key,default)与setdefault(key,def...

网友评论

      本文标题:Python学习笔记之字典

      本文链接:https://www.haomeiwen.com/subject/yjxzkttx.html