2 -8 字典dict
1 如何在一个变量中存储每个员工的个人信息?
2 字典的定义与特性
字典是Python语言中唯一的映射类型。
定义:{key1:value1,key2:value2}
1、键与值用冒号“:”分开;
2、项与项用逗号“,”分开;
特性:
1.key-value结构
2.key必须可hash、且必须为不可变数据类型、必须唯一
3.可存放任意多个值、可修改、可以不唯一
4.无序
5.查找速度快
假设key对应的hash值为下面的数字,排序然后根据二分法查找这个值所对应的key的hash值,
二分法查找速度快
3 字典的创建
person = {'name': 'alex','age': 20} person1 = dict(name='seven', age=20) person2 = dict({'name': 'abc', 'age': 20}) person3 = dict((['name', 'abc'], ["def", 18])) dic = {}.fromkeys(['k1','k2'],[]) print(dic) #{'k1': [], 'k2': []} dic["k2"].append(1) print(dic) #{'k1': [1], 'k2': [1]}
info = {'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000]} print(info['jack']) #[22, 'mod', 'ui', 555] print(info['alex']) #[23, 'it', 'it', 1000] print(info['alex'][0]) #23 info["alex"][1]="老师" print(info) #{'jack': [22, 'mod', 'ui', 555], 'alex': [23, '老师', 'it', 1000]
4 字典的常见操作
增加
1、dic['new_key'] = 'new_value'; info = {'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000]} print(info['jack']) #[22, 'mod', 'ui', 555] print(info['alex']) #[23, 'it', 'it', 1000] print(info['alex'][0]) #23 info["alex"][1]="老师" print(info) #{'jack': [22, 'mod', 'ui', 555], 'alex': [23, '老师', 'it', 1000] info[24,'eat','ps',678] = "abc" print(info) #{'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000], (24, 'eat', 'ps', 678): 'abc'} 2、dic.setdefault(key, None) ,如果字典中不存在Key键,由 dic[key] = default 为它赋值;_ info.setdefault("abc","def") print(info) #{'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000], 'abc': 'def'} #注意: setdefault()方法是没有key就新建。有就返回值
查看
1、dic['key'],返回字典中key对应的值,若key不存在字典中,则报错; info = {'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000]} print(info["def"]) #Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/-1/Demo/其他/other.py", line 480, in <module> print(info["def"]) KeyError: 'def' 2、dict.get(key, default = None) 返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None) print(info.get("alex")) #[23, 'it', 'it', 1000] print(info.get("def")) #None
删除
1、dic.pop(key[,default]) 和get方法相似。如果字典中存在key,删除并返回key对应的vuale;如果key不存在,且没有给出default的值,则引发keyerror异常; info = {'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000]} print(info.pop('alex')) #[23, 'it', 'it', 1000] print(info) #{'jack': [22, 'mod', 'ui', 555]} 2、dic.clear() 删除字典中的所有项或元素;
键、值、键值对
1、dic.keys() 返回一个包含字典所有KEY的列表; 2、dic.values() 返回一个包含字典所有value的列表; 3、dic.items() 返回一个包含所有(键,值)元祖的列表; 4、dic.iteritems()、dic.iterkeys()、dic.itervalues() 与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表; info = {'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000]} print(info.keys()) #dict_keys(['jack', 'alex']) print(info.values()) #dict_values([[22, 'mod', 'ui', 555], [23, 'it', 'it', 1000]]) print(info.items()) #dict_items([('jack', [22, 'mod', 'ui', 555]), ('alex', [23, 'it', 'it', 1000])])
修改
1、dic['key'] = 'new_value',如果key在字典中存在,'new_value'将会替代原来的value值;如果不存在就会新建{key:value} info = {'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000]} info['jack'] = "abc" print(info) #{'jack': 'abc', 'alex': [23, 'it', 'it', 1000]} 2、dic.update(dic2) 将字典dic2的键值对添加到字典dic中,key有的话会覆盖 info = {'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000]} dic = {'name':'abc'} info.update(dic) print(info) #{'jack': [22, 'mod', 'ui', 555], 'alex': [23, 'it', 'it', 1000], 'name': 'abc'}
循环
1、for k in dic.keys() 2、for k,v in dic.items() 3、for k in dic for k in dic.keys(): print(k) """ name age job home """ for k ,v in dic.items(): print(k,v) """ name abc age 22 job it home beijing """ for k in dic: print(k) """ name age job home """
长度 len(dic)
5 多级字典的嵌套
6 字典-练习题
当你再想我能不能完成的时候,你就已经输了。