字典dict

介绍

  • key-value键值对的数据集合
  • 是可变的、无序的、key具有唯一性

字典创建

  • d = dict()
  • d = {}
  • Dict(**kwargs) 使用name=value初始化一个字典

字典访问

  • d[key]
  • 返回key对应的value
  • key不存在抛出keyError异常
  • get(key[, default])
  • 返回key对应的value
  • key不存在返回默认值,如果没有default返回None
  • get方法不会抛异常
  • setdefault(key[, default])
  • 返回key对应的value
  • key不存在,则添加kv对,value为default值

字典增加和修改

  • d[key] = value
  • 将key对应的值修改为value
  • key不存在添加新的键值对
  • update([other]) —> None
  • 使用另一个字典的键值对更新本字典
  • key不存在,就添加
  • key存在,覆盖已存在的key对应的value
  • 原处修改

字典删除

  • pop(key[, default])
  • key存在,移除,并返回它的value
  • key不存在,返回给定的default
  • default未设置,key不存在则抛出keyError
  • popitem()
  • 移除并返回一个任意的键值对
  • 字典为空,抛出keyError
  • clear()
  • 清空字典

字典删除

  • del语句
  • del d['c']
  • del本质上删除的是一个对象的引用

字典遍历

  • for … in dict
  • 遍历key
for k in d1:
    print(k)
for k in d.keys():
    print(k)
  • 遍历value
for v in d.values():
    print(v)
for v in d:
    print(d.get(v))
  • 遍历键值对
for item in d.items():
    print(item)   # 返回值为元组
    
for k,v in d.items()  # k,v 可使用结构方式
    print(k,v) # 返回k或者v
  • 总结
  • python3中,keys/values/items方法返回一个可迭代对象,不会将结果保存在内存中
  • python2中,上面的方法会返回一个新的列表,占据新的内存,所以python2中建议使用iterkeys、itervalues,会返回一个迭代器

字典的key

  • key的要求必须为可hash

缺省字典defaultdict

  • Collections.defaultdict([default_factory[,...]])
  • 第一个参数是default_factory,缺省是None,它提供了一个初始化函数,当key不存在,这个工厂函数来生成key对应的value
from collections import defaultdict
d1 = {}
d2 = defaultdict(list) # 创建缺省字典,如果key不存在,则生成k对应的空列表
for k in "abcde":
    for v in range(5):
        if k not in d1.keys():
            d1[k] = []
        d1[k].append(v)
print(d1)
        
for k in "mnopq":
    for v in range(3):
        d2[k].append(v)  # 相当于调用缺省字典的工厂函数判断k是否存在,如果不存在则创建键值对,并添加v
print(d2)

顺序字典orderedDict

  • collections.OrderedDict([items])
  • 有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出。
  • key并不是按照加入的顺序排列,可使用OrderedDict来顺序排列
# 普通字典
>>> d = {}
>>> d['apple'] = 3
>>> d['orange'] = 4
>>> d['pear'] = 1
>>> d['banabna'] = 2
>>> d
{'orange': 4, 'pear': 1, 'apple': 3, 'banabna': 2}

# 有序字典
>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> od['apple'] = 3
>>> od['orange'] = 4
>>> od['pear'] = 1
>>> od['banabna'] = 2
>>> od
OrderedDict([('apple', 3), ('orange', 4), ('pear', 1), ('banabna', 2)])