1、字典介绍

**
字典并不是什么全新的概念,我们接触的字典,就是《新华字典》,新华字典的结构和python语言中的字典,在结构上是一样的。咱们以读音来查找一个汉字,比如”张”这个字,读音是zhang,一声,你一定可以在字典里找到与它对应的页数,假设是第100页,那么zhang 和 100之间就有一个映射关系,你知道了zhang,也就知道了100

另一个较为常见的例子是手机通讯录,你想找一个人的电话时,你应该在通讯录里找到这个人的名字,然后点进去查看它的电话号,姓名和电话号之间存在着映射关系,你知道姓名,就知道电话号

下面这张图展示了字典的数据结构
Python3字典 - 图1
左侧是key,右侧是value。

字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值对用冒号分割,每个对之间用逗号分隔,整个字典包括花括号{}中,格式如下:

字典键的特性
字典值可以没有限制地取任何Python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
有两点需要注意:

  • 不允许同一个键出现两次
  • 创建时如果同一个键被赋值两次,后一个值会被记住。

    2、创建一个字典

    字典里存储的是键值对,键值对用冒号分割key与value,每个键值(key-value)对用逗号分割,整个字典包裹在花括号{}中 ```bash contacts_dict = { “小王”: ‘13892339876’, “小张”: ‘13898320987’, “小李”: ‘13890348745’ }

空字典

empty_dict = {}

dict = {‘Name’: ‘Zara’, ‘Age’: 7, ‘Class’: ‘First’};

  1. 注意: **什么数据可以做key**
  2. 数据必须是可hash的,下面罗列的5种数据类型是可以做字典key的数据类型
  3. 1. bool
  4. 1. int
  5. 1. float
  6. 1. 字符串
  7. 1. 元组
  8. 下面3中数据类型不可以做字典的key
  9. 1. 列表
  10. 1. 集合
  11. 1. 字典
  12. 凡是可变对象都不可以做字典的key,凡是不可变对象,都可以做字典的key
  13. <a name="teFNc"></a>
  14. ### 3、访问字典里的值
  15. ```bash
  16. dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
  17. print "dict['Name']: ", dict['Name'];
  18. print "dict['Age']: ", dict['Age'];
  19. #结果
  20. dict['Name']: Zara
  21. dict['Age']: 7
  22. 如果用字典里没有的键访问数据,会输出错误如下:
  23. Traceback (most recent call last):
  24. File "test.py", line 5, in <module>
  25. print "dict['Alice']: ", dict['Alice'];

4、新增键值对和修改value

  1. #修改value数据
  2. score_dict = {
  3. '小明': 96,
  4. '小刚': 98,
  5. '小红': 94
  6. }
  7. score_dict['小丽'] = 100
  8. print(score_dict['小丽'])
  9. #新增键值对
  10. score_dict['小兰'] = 89
  11. print(score_dict)
  12. #结果:
  13. {'小明': 96, '小刚': 98, '小红': 94, '小兰': 89}
  14. #如果key不存在
  15. Traceback (most recent call last):
  16. File "/Users/kwsy/PycharmProjects/pythonclass/mytest/demo.py", line 7, in <module>
  17. print(score_dict['小丽'])
  18. KeyError: '小丽'

5、删除字典

  1. dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
  2. del dict['Name'] # 删除键是'Name'的条目
  3. dict.clear() # 清空词典所有条目
  4. del dict # 删除词典
  5. print("dict['Age']: ", dict['Age'])
  6. print("dict['School']: ", dict['School'])

6、python嵌套字典

  1. stu_dict = {
  2. 'name': '小明',
  3. 'age': 12,
  4. 'score': {
  5. '语文': 90,
  6. '数学': 98
  7. }
  8. }
  9. print(stu_dict['score']['语文'])

7、字典遍历

  1. #遍历键
  2. dict1 = {'name': 'TOM', 'age': 20, 'gender': '男'}
  3. for key in dict1.keys():
  4. print(key)
  5. #遍历键值对
  6. dict1 = {'name': 'TOM', 'age': 20, 'gender': '男'}
  7. for item in dict1.items():
  8. print(item)
  9. #结果
  10. ('name', 'TOM')
  11. ('age', 20)
  12. ('gender', '男')

8、python字典方法介绍

方法 功能作用
clear() 删除字典内所有的元素
copy() 返回字典的浅复制
fromkeys() 以指定key创建一个新的字典
get() 返回指定key的值
items() 成对返回所有key和value
keys() 返回字典所有的key
values 返回字典所有value
setdefault() 为key设置对应的默认值
update() 更新字典
pop() 删除键值对
  1. #copy
  2. dic1 = {
  3. '小明': 98
  4. }
  5. dic2 = dic1.copy()
  6. print(dic1)
  7. print(dic2)
  8. {'小明': 98}
  9. {'小明': 98}
  10. import copy
  11. dic1 = {
  12. '小明': 98
  13. }
  14. dic2 = copy.copy(dic1)
  15. print(dic1)
  16. print(dic2)
  17. {'小明': 98}
  18. {'小明': 98}
  19. 这两段代码都实现了浅复制,浅复制是一种危险的复制,建议你不要使用
  20. 因为这种复制并没有创建新的对象,因此,你对dic2的修改会影响到dic1
  21. #fromkeys,以指定key创建一个新的字典
  22. stu_dict = dict.fromkeys(['小明', '小刚'], 90)
  23. print(stu_dict)
  24. #结果
  25. {'小明': 90, '小刚': 90}
  26. #get,返回指定key的值
  27. get方法,是一种安全的获取value的方法,如果key不存在,则返回defaultdefault可以由你来指定,如果你不指定,则默认为None
  28. empty_dict = {}
  29. print(empty_dict.get('python'))
  30. print(empty_dict.get('python', 100))
  31. #结果
  32. None
  33. 100
  34. #items(),成对返回所有key和value
  35. score_dict = {
  36. '小明': 96,
  37. '小刚': 98,
  38. '小红': 94
  39. }
  40. for key, value in score_dict.items():
  41. print(key, value)
  42. #keys,返回字典所有的key
  43. score_dict = {
  44. '小明': 96,
  45. '小刚': 98,
  46. '小红': 94
  47. }
  48. keys = score_dict.keys()
  49. print(keys, type(keys))
  50. for key in keys:
  51. print(key)
  52. #values,返回字典所有value
  53. score_dict = {
  54. '小明': 96,
  55. '小刚': 98,
  56. '小红': 94
  57. }
  58. values = score_dict.values()
  59. print(values, type(values))
  60. for value in values:
  61. print(value)