1、字典介绍
**
字典并不是什么全新的概念,我们接触的字典,就是《新华字典》,新华字典的结构和python语言中的字典,在结构上是一样的。咱们以读音来查找一个汉字,比如”张”这个字,读音是zhang,一声,你一定可以在字典里找到与它对应的页数,假设是第100页,那么zhang 和 100之间就有一个映射关系,你知道了zhang,也就知道了100
另一个较为常见的例子是手机通讯录,你想找一个人的电话时,你应该在通讯录里找到这个人的名字,然后点进去查看它的电话号,姓名和电话号之间存在着映射关系,你知道姓名,就知道电话号
下面这张图展示了字典的数据结构
左侧是key,右侧是value。
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值对用冒号分割,每个对之间用逗号分隔,整个字典包括花括号{}中,格式如下:
字典键的特性
字典值可以没有限制地取任何Python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
有两点需要注意:
- 不允许同一个键出现两次
- 创建时如果同一个键被赋值两次,后一个值会被记住。
2、创建一个字典
字典里存储的是键值对,键值对用冒号分割key与value,每个键值(key-value)对用逗号分割,整个字典包裹在花括号{}中 ```bash contacts_dict = { “小王”: ‘13892339876’, “小张”: ‘13898320987’, “小李”: ‘13890348745’ }
空字典
empty_dict = {}
dict = {‘Name’: ‘Zara’, ‘Age’: 7, ‘Class’: ‘First’};
注意: **什么数据可以做key**数据必须是可hash的,下面罗列的5种数据类型是可以做字典key的数据类型1. bool1. int1. float1. 字符串1. 元组下面3中数据类型不可以做字典的key1. 列表1. 集合1. 字典凡是可变对象都不可以做字典的key,凡是不可变对象,都可以做字典的key<a name="teFNc"></a>### 3、访问字典里的值```bashdict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};print "dict['Name']: ", dict['Name'];print "dict['Age']: ", dict['Age'];#结果dict['Name']: Zaradict['Age']: 7如果用字典里没有的键访问数据,会输出错误如下:Traceback (most recent call last):File "test.py", line 5, in <module>print "dict['Alice']: ", dict['Alice'];
4、新增键值对和修改value
#修改value数据score_dict = {'小明': 96,'小刚': 98,'小红': 94}score_dict['小丽'] = 100print(score_dict['小丽'])#新增键值对score_dict['小兰'] = 89print(score_dict)#结果:{'小明': 96, '小刚': 98, '小红': 94, '小兰': 89}#如果key不存在Traceback (most recent call last):File "/Users/kwsy/PycharmProjects/pythonclass/mytest/demo.py", line 7, in <module>print(score_dict['小丽'])KeyError: '小丽'
5、删除字典
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}del dict['Name'] # 删除键是'Name'的条目dict.clear() # 清空词典所有条目del dict # 删除词典print("dict['Age']: ", dict['Age'])print("dict['School']: ", dict['School'])
6、python嵌套字典
stu_dict = {'name': '小明','age': 12,'score': {'语文': 90,'数学': 98}}print(stu_dict['score']['语文'])
7、字典遍历
#遍历键dict1 = {'name': 'TOM', 'age': 20, 'gender': '男'}for key in dict1.keys():print(key)#遍历键值对dict1 = {'name': 'TOM', 'age': 20, 'gender': '男'}for item in dict1.items():print(item)#结果('name', 'TOM')('age', 20)('gender', '男')
8、python字典方法介绍
| 方法 | 功能作用 |
|---|---|
| clear() | 删除字典内所有的元素 |
| copy() | 返回字典的浅复制 |
| fromkeys() | 以指定key创建一个新的字典 |
| get() | 返回指定key的值 |
| items() | 成对返回所有key和value |
| keys() | 返回字典所有的key |
| values | 返回字典所有value |
| setdefault() | 为key设置对应的默认值 |
| update() | 更新字典 |
| pop() | 删除键值对 |
#copydic1 = {'小明': 98}dic2 = dic1.copy()print(dic1)print(dic2){'小明': 98}{'小明': 98}import copydic1 = {'小明': 98}dic2 = copy.copy(dic1)print(dic1)print(dic2){'小明': 98}{'小明': 98}这两段代码都实现了浅复制,浅复制是一种危险的复制,建议你不要使用因为这种复制并没有创建新的对象,因此,你对dic2的修改会影响到dic1#fromkeys,以指定key创建一个新的字典stu_dict = dict.fromkeys(['小明', '小刚'], 90)print(stu_dict)#结果{'小明': 90, '小刚': 90}#get,返回指定key的值get方法,是一种安全的获取value的方法,如果key不存在,则返回default,default可以由你来指定,如果你不指定,则默认为Noneempty_dict = {}print(empty_dict.get('python'))print(empty_dict.get('python', 100))#结果None100#items(),成对返回所有key和valuescore_dict = {'小明': 96,'小刚': 98,'小红': 94}for key, value in score_dict.items():print(key, value)#keys,返回字典所有的keyscore_dict = {'小明': 96,'小刚': 98,'小红': 94}keys = score_dict.keys()print(keys, type(keys))for key in keys:print(key)#values,返回字典所有valuescore_dict = {'小明': 96,'小刚': 98,'小红': 94}values = score_dict.values()print(values, type(values))for value in values:print(value)
