字典
字典存在意义:
1.假设有一个列表
li=[‘Pyth’,‘Java’,‘C’]
li[0]=‘Python’
li.sort()
2.假设统计学生信息,包括学号姓名,年龄
li=[[20190101,‘Tom’,18],
[20190201,‘Jack’,19],
…
[20190n01,‘Riku’,18]]
循环遍历,十分复杂
- 字典是列表以外Python中使用最灵活的内置数据类型
特点:
-
key:value ,键值之间用冒号(:)连接
-
key:value 组成字典的一个元素
-
键值对之间用逗号(,)隔开
-
整个字典用{}包裹
-
可变数据类型
-
无序
与列表的区别:
-
列表有序,字典无序
-
列表可以通过索引(偏移)访问元素,字典通过键(key)访问元素
字典的基本格式:
dic = {key1:value1,key2:value2,...,keyn:valuen}
- 值可以取任意数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希。
- 可哈希 —>不可变
- 不可哈希 —>可变
字典的创建
空字典的创建
dic = {}
print(type(dic))
#输出
<class 'dict'>
创建多元素字典
- 直接创建
dic = {'id': 123456, 'name': 'Tome', 'age': 18}
print(dic)
print(type(dic))
#输出
{'id': 123456, 'name': 'Tome', 'age': 18}
<class 'dict'>
- 强制转换
key = ('id', 'name', 'age')
value = (123456, 'Tom', 18)
dic = dict(zip(key, value))
print(dic, type(dic))
#输出
{'id': 123456, 'name': 'Tom', 'age': 18} <class 'dict'>
-
通过字典的fromkeys方法创建字典
- 格式
dict.fromkeys(seq,val=None)
- 以seq中的元素作为该字典的键
- val的值作为该字典中所有键对应的初始值,如不提供,默认为None
dic = dict.fromkeys('Hello')
print(dic)
dic1 = dict.fromkeys('pwd',123456)
print(dic1)
#输出
{'H': None, 'e': None, 'l': None, 'o': None}
{'p': 123456, 'w': 123456, 'd': 123456}
字典的常见操作
增
- 直接添加键值对(dic[key] = value)
- 通过使用变量名[‘键’]=‘值’,如果key不存在,新建键值对(key:value)
- 如果存在就更新值(value)
dic={}
dic['id'] = '007'
print(dic)
dic['id'] = '008'
print(dic)
#输出
{'id': '007'}
{'id': '008'}
- 通过dict1.update(dic)更新键值对
- 将dic字典中的键值对添加到dict1中,如果有相同的键,则更新键的值。
dic={'a':1,'b':2,'c':3}
dic1={'d':4,'e':5,'f':6,'a':10}
dic.update(dic1)
print(dic)
#输出
{'a': 10, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
删
- 通过dict.pop根据键值删除键值对
- 格式:dict.pop(key[,default])
- 如果key存在于dict中,删除并返回dict[key]
- 如果不存在,给出默认值则返回默认值,未给出默认值则报错
- 格式:dict.pop(key[,default])
dic={'a':1}
dic.pop('a')
print(dic)
#输出
{}
- 通过popitem方法删除键值对,随机删除一个键值对,其实等于删除可视的最后一个键值对
- 返回值为元组
dic={'a':1,'b':2,'c':3}
print(dic.popitem())
print(type(dic.popitem()))
print(dic)
#输出
('c', 3)
<class 'tuple'>
{'a': 1}
- del dict[key]
dic={'a':1,'b':2,'c':3}
del dic['a']
print(dic)
#输出
{'b': 2, 'c': 3}
- dict.clear()
- 返回值为None
dic={'a':1,'b':2,'c':3}
dic.clear()
print(dic)
#输出
{}
改
- 直接通过键值对(dic[key] = value)进行修改
dic={}
dic['id'] = '007'
print(dic)
dic['id'] = '008'
print(dic)
#输出
{'id': '007'}
{'id': '008'}
- dict.setdefault()
- 键存在,不改动,返回字典中的值
- 不存在,在字典中添加相应的键值对,并返回对应的值
dic = {'id': 20190101, 'name': 'Tom', 'age': 22}
print(dic.setdefault('name', 'Jack'))
print(dic)
print(dic.setdefault('name1', 'Jack'))
print(dic)
#输出
Tom
{'id': 20190101, 'name': 'Tom', 'age': 22}
Jack
{'id': 20190101, 'name': 'Tom', 'age': 22, 'name1': 'Jack'}
查
- 根据键值key查询
- 不存在则报错
dic = {'id': 20190101, 'name': 'Tom', 'age': 22}
print(dic['id'])
#输出
20190101
- dict.get()
- 存在则返回值,不存在则返回None,不会报错。
- 用于需要查询且不确定是否含有相应的键值对的情况,不会抛出异常。
dic = {'id': 20190101, 'name': 'Tom', 'age': 22}
print(dic.get('id'))
print(dic.get('address'))
#输出
20190101
None
遍历
-
通过键遍历
-
通过值遍历
-
通过键值对遍历
dic = {'id': 20190101, 'name': 'Tom', 'age': 22}
for i in dic.keys():
print(i,end=' ' )
print('')
for i in dic.values():
print(i,end=' ')
print('')
for i in dic.items():
print(i,end=' ')
#输出
id name age
20190101 Tom 22
('id', 20190101) ('name', 'Tom') ('age', 22)
- 练习
- 一个列表将大于60和小于60的元素添加进一个字典种
li = [23, 34, 45, 22, 67, 123, 412, 432, 5, 5, 6, 12, 4, 5, 6, 1]
dic={'>60':[],'<60':[]}
for i in li:
if i >60:
dic['>60'].append(i)
else:
dic['<60'].append(i)
print(dic)
#输出
{'>60': [67, 123, 412, 432], '<60': [23, 34, 45, 22, 5, 5, 6, 12, 4, 5, 6, 1]}