《Python基础教程(第二版)》学习笔记 -> 第四章 字典

 字典是Python中唯一内建的映射类型。

 字典中的值并没有特殊的顺序,但是都存储在一个特定的键(Key)里。键可以是数字、字符串甚至是元组。

字典的使用


 某些情况下,字典比列表更加适用:

  • 表征游戏棋盘的状态,每个键都是由坐标组成的元组;
  • 存储文件修改次数,用文件名作为键;
  • 数字电话/地址簿

 

创建和使用字典


 字典由多个键及与其对应的值构成的对组成。示例:

>>> phonebook = {'a':'001','b':'002','c':'003'}

>>> phonebook['a']

'001'

上例中,字母是键,数字是值。每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一堆大括号括起来。空字典仅由两个大括号组成。

  1. dict 函数
    可以用dict 函数,通过其它映射(比如其它字典)或者(键,值)这样的序列对建立字典。
    >>> items = [('name','Gumby'),('age',42)]
    
    >>> d = dict(items)
    
    >>> d
    
    {'age': 42, 'name': 'Gumby'}
    
    >>> d['name']
    
    'Gumby'

    dict 函数也可以通过关键字参数来创建字典:

    >>> d = dict(name = 'Python', level = 5)
    
    >>> d
    
    {'name': 'Python', 'level': 5}

     

  2. 基本字典操作
    字典的基本行为在很多方面与序列(sequence)类似:
    ①len(d)返回d中项(键-值对)的数量;
    ②d[k]返回关联到键k上的值;
    ③d[k]=v 将值v关联到键k上;
    ④del d[k]删除键为k的项;
    ⑤k in d检查d中是否含有键为k的项。
    字典和列表的区别:
    ①键类型: 字典的键不一定为整形数据。
    ②自动添加:即使那个键起初在字典中并不存在,也可以为它分片一个值,这样字典会建立新的项。而列表不能关联到索引范围外。
    ③成员资格:表达式 k in d(d为字典)查找的是键,而不是值。表达式v in l(l为列表)则用来查找值,而不是索引

  3. 字典的格式化字符串
    >>> phonebook = {'Beth':'110','Mike':'120','Lily':'119'}
    
    >>> "Beth's phone number is %(Beth)s"%phonebook
    
    "Beth's phone number is 110"

     

 

字典方法


  1.  clear
    clear 方法清字典中所有的项。

    >>> d = {'a':'b'}
    
    >>> d.clear()
    
    >>> d
    
    {}

     

  2. copy
    copy方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制(shallw copy))


    >>> x = {'username':'admin','machine':['foo','bar','baz']}
    
    >>> y = x.copy()
    
    >>> x
    
    {'username': 'admin', 'machine': ['foo', 'bar', 'baz']}
    
    >>> y['username'] = 'tester'
    
    >>> y['machine'].remove('foo')
    
    >>> x
    
    {'username': 'admin', 'machine': ['bar', 'baz']}
    
    >>> y
    
    {'username': 'tester', 'machine': ['bar', 'baz']}

    可以看到,在副本中替换值的时候,原始字典不受影响,如果修改了某个值,原始的字典也会改变。

    避免这个问题的一种方法就是使用深复制(deep copy)
    >>> from copy import deepcopy
    
    >>> d = {}
    
    >>> d['names'] = ['Alfred','Bertrand']
    
    >>> c = d.copy()
    
    >>> dc = deepcopy(d)
    
    >>> d['names'].append('Python')
    
    >>> c
    
    {'names': ['Alfred', 'Bertrand', 'Python']}
    
    >>> d
    
    {'names': ['Alfred', 'Bertrand', 'Python']}
    
    >>> dc
    
    {'names': ['Alfred', 'Bertrand']}

     

  3. fromkeys
    fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None
    >>> {}.fromkeys(['name','age'])
    
    {'age': None, 'name': None}

    如果不想使用None作为默认值,也可以自己提供默认值:

    >>> {}.fromkeys(['name','age'],'(defalut value)')
    
    {'age': '(defalut value)', 'name': '(defalut value)'}

     

  4. get
    当使用get访问一个不存在的键时,没有任何异常,而得到了None值。还可以自定义“默认的值”,替换None
    >>> d = {}
    
    >>> d.get('name','n/a')
    
    'n/a'

     

  5. has_key
    has_key 方法可以检查字典中是否含有给出的键。表达式d.has_key(k),相当于k in d
    >>> d = {}
    
    >>> d.has_key('name')
    
    False
    
    >>> d['name'] = 'py'
    
    >>> d.has_key('name')
    
    True

     

  6. items 和 iteritems
    items 方法将所有的字典以列表方式返回,这些列表项中的每一项都来自于(键,值)。但是项在返回时没有特殊的顺序。
    >>> d = {'title':'Python','body':'tester'}
    
    >>> d.items()
    
    [('body', 'tester'), ('title', 'Python')]

    iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:

    >>> it = d.iteritems()
    
    >>> it
    
    <dictionary-itemiterator object at 0x012199F0>
    
    >>> list(it)
    
    [('body', 'tester'), ('title', 'Python')]

     

  7. keys 和 iterkeys
    keys方法将字典中的键以列表的形式返回,iterkeys则返回针对键的迭代器。

  8. pop
    pop方法用来获得对应于给定键的值,然后将这个键-值对从字典中移除。
    >>> d = {'a':'b','c':'d'}
    
    >>> d.pop('c')
    
    'd'
    
    >>> d
    
    {'a': 'b'}

     

  9. popitem
    popitem弹出随机的项,因为字典没有“最后的元素”或者其他关于顺序的概念。
    >>> d = {'a':'b','c':'d','e':'f','g':'h'}
    
    >>> d.popitem()
    
    ('a', 'b')
    
    >>> d
    
    {'c': 'd', 'e': 'f', 'g': 'h'}

     

  10. setdefault
    setdefault 方法在某种程度上类似于get方法,就是能获得与给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。
    >>> d = {}
    
    >>> d.setdefault('name','n/a')
    
    'n/a'
    
    >>> d
    
    {'name': 'n/a'}
    
    >>> d['name'] = 'Python'
    
    >>> d.setdefault('name','n/a')
    
    'Python'
    
    >>> d
    
    {'name': 'Python'}

    可以看到,当键不存在的时候,setdefault返回默认值并且相应地更新字典。如果键存在,那么就返回与其对应的值,但不改变字典

  11. update
    >>> d = {'title':'python','body':'tester','footer':'fighting'}
    
    >>> x = {'title':'position'}
    
    >>> d.update(x)
    
    >>> d
    
    {'body': 'tester', 'footer': 'fighting', 'title': 'position'}

     

  12. values 和 itervalues
    >>> d = {}
    
    >>> d[1] = 1
    
    >>> d[2] = 2
    
    >>> d[3] = 3
    
    >>> d[4] = 4
    
    >>> d[5] = 1
    
    >>> d.values()
    
    [1, 2, 3, 4, 1]

    values方法以列表的形式返回字典中的值。返回值列表可以包含重复的值。

 小结:

映射:映射可以使用任何不变对象标识元素,最 常用的类型是字符串和元组。

 

你可能感兴趣的:(python)