字典

1.字典是一些 "键 --- 值" 对的无序集和。它通过键来索引。

  • 字典是可变对象,它的元素的值的类型不限,它的元素的键类型是不可变类型

    意味着键类型不能是列表、set、,字典

  • 字典的常量表达式:{'a':3,'b':4},空字典的常量表达式为{}

  • dict()函数可以从关键字参数生成字典:dict(a=3,b=4)生成字典{'a':3,'b':4}
    • 你可以通过zip()函数生成关键字参数:dict(zip(['a','b'],[3,4])) 生成字典{'a':3,'b':4}
  • 你也可以用字典的.fromkeys()类方法生成字典:

    • dict.fromkeys(['a','b']) 生成字典{'a':None,'b':None}
    • dict.fromkeys(['a','b'],3) 生成字典{'a':3,'b':3}

    字典的生成

  • 字典索引:d[key]。字典索引返回对应的值

  • 键测试:key in d。测试指定键是否存在字典中
  • 字典的迭代:
    • d.keys():返回一个dict_keys对象,它是一个可迭代对象,迭代时返回键序列
    • d.values():返回一个dict_values对象,它是一个可迭代对象,迭代时返回值序列
    • d.items():返回一个dict_items对象,它是一个可迭代对象, 迭代时返回元组(键,值)的序列

      字典迭代在Python3中返回可迭代对象,在Python2.7中均返回列表。

      因此在Python3中如果想得到列表,必须将返回值传入`list()`函数中得到列表
      
  • 字典的拷贝:d.copy()。只是字典的浅拷贝
  • 获取键的值:通过d.get(key,default_value)。返回键对应的值, 若键不存在则返回 default_value

    对于d[key]返回对应的值,如果key不存在则抛出KeyError异常

    字典的索引、键测试、迭代和拷贝

  • 字典的操作:
    • d1.update(d2):合并两个字典,原地修改d1字典
    • d.pop(key): 从字典中删除key并返回该元素的值
    • del d[key]:从字典中删除key但是不返回该元素的值
    • d[key]=value:原地的添加/修改字典。当向不存在的键赋值时,相当于添加新元素
  • 获取字典中元素数量:len(d)。它也等于键列表/值列表的长度
    字典操作和数量
  • 字典本身也是一个可迭代对象,它的迭代方法为:

      for key in d:
        pass
    

    它在列表的键上迭代,也等价于

      for key in d.keys()
        pass
    

    字典迭代

2.Python3中字典的变化:

  • d.keys()d.values()d.items()返回的是可迭代对象,他们称为视图对象, 而不是列表。修改字典,则这些视图对象会相应变化
  • 支持字典解析表达式来生成字典,如 {k:v for k,v in zip(['a','b','c'],[1,2,3])}{k:v for k,v in [('a',1),('b',2),('c',3)]}
  • 取消了Python2中的has_key(key)方法,而用key in d表达式取代
  • Python3中,只有相等不等测试有效,字典的大小比较无效
    Python3字典变化

3.Python3中字典是一个迭代器对象,其迭代结果是返回键序列