字典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
      1. for k in d1:
      2. print(k)
      3. for k in d.keys():
      4. print(k)
  • 遍历value
    1. for v in d.values():
    2. print(v)
    3. for v in d:
    4. print(d.get(v))
  • 遍历键值对

  • ```python for item in d.items(): print(item) # 返回值为元组

for k,v in d.items() # k,v 可使用结构方式 print(k,v) # 返回k或者v

  1. -
  2. 总结
  3. - python3中,keys/values/items方法返回一个可迭代对象,不会将结果保存在内存中
  4. - python2中,上面的方法会返回一个新的列表,占据新的内存,所以python2中建议使用iterkeysitervalues,会返回一个迭代器
  5. <a name="c4f2cce0"></a>
  6. ### 字典的key
  7. - key的要求必须为可hash
  8. <a name="141aa141"></a>
  9. ### 缺省字典defaultdict
  10. -
  11. Collections.defaultdict([default_factory[,...]])
  12. - 第一个参数是default_factory,缺省是None,它提供了一个初始化函数,当key不存在,这个工厂函数来生成key对应的value
  13. ```python
  14. from collections import defaultdict
  15. d1 = {}
  16. d2 = defaultdict(list) # 创建缺省字典,如果key不存在,则生成k对应的空列表
  17. for k in "abcde":
  18. for v in range(5):
  19. if k not in d1.keys():
  20. d1[k] = []
  21. d1[k].append(v)
  22. print(d1)
  23. for k in "mnopq":
  24. for v in range(3):
  25. d2[k].append(v) # 相当于调用缺省字典的工厂函数判断k是否存在,如果不存在则创建键值对,并添加v
  26. print(d2)

顺序字典orderedDict

  • collections.OrderedDict([items])

    • 有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出。
    • key并不是按照加入的顺序排列,可使用OrderedDict来顺序排列 ```python

      普通字典

      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)]) ```