美文网首页
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学习笔记之字典

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