zoukankan      html  css  js  c++  java
  • python数据类型-映射和集合-字典

    字典是python语言中唯一的映射类型,映射对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系。一个字典对象是可变的,是一个容器类型,可存储任意个数的python对象,其中也可以包括其他容器类型。

    1.创建字典和给字典赋值

    创建字典只需要把字段赋值给一个变量,不管这个字典是否包含元素。

    1 >>> dict1 = {}
    2 >>> dict2 = {'name':'earth', 'port':80}

    或者使用工厂方法dict()来创建字典。

    1 >>> fdict = dict((['x', 1], ['y', 2]))
    2 >>> fdict
    3 {'y': 2, 'x': 1}

    另外可使用内建方法fromkeys()来创建一个"默认"字典,字典中元素具有相同的值(如果没有给出,默认为None)

    1 >>> ddict = {}.fromkeys(('x', 'y'), -1)
    2 >>> ddict
    3 {'y': -1, 'x': -1}
    4 >>> edict = {}.fromkeys(('foo', 'bar'))
    5 >>> edict
    6 {'foo': None, 'bar': None}

    2.访问字典中的值

    遍历一个字典(一般用键),只需要循环查看它的键

    1 >>> dict2 = {'name':'foo', 'port':80}
    2 >>> for key in dict2.keys():
    3 ... print 'key:%s value:%s' % (key, dict2[key])
    4 ...
    5 key:name value:foo
    6 key:port value:80

    另外可用迭代访问类序列对象(sequence-like objects),比如字典和文件,只需要用字典的名字就可以在for循环里遍历字典。

    1 >>> dict2 = {'name':'foo', 'port':80}
    2 >>> for key in dict2:
    3 ... print 'key:%s value:%s' % (key, dict2[key])
    4 ...
    5 key:name value:foo
    6 key:port value:80

    需要得到字典中某个元素的值,在字典键加上中括号得到。

    1 >>> dict2 = {'name':'foo', 'port':80}
    2 >>> dict2['name']
    3 'foo'

    3.更新字典

    有以下方式:添加一个新数据项或新元素(即,一个键-值对);修改一个已存在的数据项;删除一个已存在的数据项。

     1 >>> dict2 = {'name':'foo', 'port':80}
     2 >>> dict2['name'] = 'jone'
     3 >>> dict2['arch'] = 6969
     4 >>> dict2
     5 {'arch': 6969, 'name': 'jone', 'port': 80}
     6 >>> del dict2['name']
     7 >>> dict2
     8 {'arch': 6969, 'port': 80}
     9 >>> dict2.clear()
    10 >>> dict2
    11 {}
    12 >>> del dict2
    13 >>> dict2
    14 Traceback (most recent call last):
    15 File "<stdin>", line 1, in <module>
    16 NameError: name 'dict2' is not defined
    17 >>> dict2 = {'name':'foo', 'port':80}
    18 >>> dict2.pop('name') #删除并返回键为"name"的条目
    19 'foo'
    20 >>> dict2
    21 {'port': 80}

    4.字典的键

    不允许一个键对应多个值:一个键对应多个值是不允许的(像列表、元组和其它字典这样的容器是可以的)。当有键发生冲突(即字典键重复赋值),取最后的赋值;

    键必须是可哈希的:所有不可变类型都是可哈希的,值相同的数字表示相同的键(例如1和1.0)。

    5.映射类型操作符

    5.1.标准类型操作符

    =、<、>、and

    5.2.字典的键查找操作符([])

    键查找操作符仅用于字典类型的操作符,用键查询,键是参数

    d[k] = v 通过键"k",给字典中某个元素赋值"v"

    d[k] 通过键"k",查询字典中某个元素的值。

    5.3.(键)成员关系操作(in,not in)

    类似于has_key()方法

    1 >>> 'name' in dict2
    2 True

    6.映射类型的内建函数和工厂函数

    6.1.标准类型函数(type()、str()和cmp())

    type():对字典调用type()工厂方法,返回字典类型"<type 'dict'>"

    str():返回字典的字符串表示

    cmp():首先比较字典的大小,然后是键,最后是值。

    6.2.映射类型相关函数

    dict():用来创建字典,如果不提供参数,生成空字典;如果参数是可迭代的(一个序列,或一个迭代器,或一个支持迭代的对象),那每个可迭代的元素必须成对出现。在每个值对中,第一个元素为字典的键,第二个元素为字典的值。

    1 >>> dict()
    2 {}
    3 >>> dict([['x', 1], ['y', 2]])
    4 {'y': 2, 'x': 1}
    5 >>> dict([('xy'[i-1], i) for i in range(1,3)])
    6 {'y': 2, 'x': 1}

    len():对字典使用len(),返回所有元素(键-值对)的数目

    1 >>> dict2 = {'a':1, 'b':2}
    2 >>> len(dict2)
    3 2

    hash():判断某个对象是否可以作为一个字典的键,将一个对象作为参数传递给hah(),返回这个对象的哈希值,只有这个对象是可哈希的,才可以作为字典的键。

    1 >>> hash([])
    2 Traceback (most recent call last):
    3 File "<stdin>", line 1, in <module>
    4 TypeError: unhashable type: 'list'
    5 >>> hash(())
    6 3527539

    6.3.映射类型内建方法

    keys():返回一个列表,包含字典中所有的键;

    values():返回一个列表,包含字典中所有的值;

    items():返回一个包含所有(键-值)元组的列表。

    1 sorted():
    2 {'a': 1, 'c': 2, 'b': 3}
    3 >>> for ek in sorted(dict1):
    4 ... print 'key:', ek, 'value:', dict1[ek]
    5 ...
    6 key: a value: 1
    7 key: b value: 3
    8 key: c value: 2

    update():将一个字典的内容添加到另一个字典中,字典中原有的键如果与新添加的键重复,那么重复键所对应的原有条目将被新键所对应的值覆盖。

    1 >>> dict1
    2 {'a': 1, 'c': 2, 'b': 3}
    3 >>> dict2 = {'b':3, 'd':5}
    4 >>> dict1.update(dict2)
    5 >>> dict1
    6 {'a': 1, 'c': 2, 'b': 3, 'd': 5}
    7 >>>

    copy():返回一个字典的副本,浅复制。

    setdefault():检查字典中是否含有某键,如果字典中这个键存在,可以取到它的值,如果键在字典中不存在,可以给这个键赋默认值并返回此值。

    1 >>> mdict = {'host':'zheng', 'port':80}
    2 >>> mdict.setdefault('prot', 'tcp')
    3 'tcp'
    4 >>> mdict.setdefault('port', '8080')
    5 80
    6 >>> mdict.items()
    7 [('host', 'zheng'), ('prot', 'tcp'), ('port', 80)]
    8 >>>

    附录:映射类型内建方法

    方法名字

    操作

    dict.clear()

    删除字典中所有的元素

    dict.copy()

    返回字典(浅复制)的一个副本

    dict.fromkeys(seq, val=None)

    创建并返回一个新字典,以seq中的元素作为该字典的键,val作为该字典中所有键对应的初始值,如果不提供此值,则默认为None

    dict.get(key, default=None)

    对字典dict中的键key,返回它对应的值value,如果字典中不存在此键,则返回default的值(参数default默认为None)

    dict.has_key(key)

    如果键在字典中存在,返回True,否则返回False,等价于in、not in操作符

    dict.items()

    返回一个包含字典中键、值对元组的列表

    dict.keys()

    返回一个包含字典中键的列表

    dict.iter()

    方法iteritems()、iterkeys()、itervalues()与它们对应的非迭代方法一样,不同的是他们返回一个子迭代,而不是一个列表

    dict.pop(key[, default])

    和get()方法类似,如果字典中key键存在,删除并返回dict[key],如果key键不存在,且没有给出default的值,则引发KeyError异常

    dict.setdefault(key, default=None)

    和方法set()类似,但如果字典中不存在key键,则由dict[key]=default为它赋值

    dict.update(dict2)

    将字典dict2的键值对添加到字典dict

    dict.values()

    返回一个包含字典中所有值的列表

  • 相关阅读:
    Hadoop脚本:自动搜集所有节点上的异常信息
    Hadoop脚本:重新初始化所有节点
    Hadoop入门:最应该看的几篇文章
    Hadoop脚本:用Streaming方式使用Hadoop
    [SaaS研究] SaaS在中国 / 中国的Salesforce / 阿里巴巴 / 阿里软件 [ 转 ]
    Hadoop常见问题与解决方法汇总
    Hadoop:你所不知道的一些相关项目
    Hadoop MapReduce 学习
    有多少项目准备和Hadoop比拼?
    开放源码的云计算平台:触手可及的云计算 [ 原 ]
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/11980224.html
Copyright © 2011-2022 走看看