字典
字典在某些语言中可能称为 联合内存 ( associative memories )或 联合数组 ( associative arrays )。序列是以连续的整数为索引,与此不同的是,字典以 关键字 为索引,关键字可以是任意不可变类型,通常用字符串或数值。如果元组中只包含字符串和数字,它可以做为关键字,如果它直接或间接的包含了可变对象,就不能当做关键字。不能用列表做关键字,因为列表可以用索引、切割或者 append()
和 extend()
等方法改变。
理解字典的最佳方式是把它看做无序的键: 值对 (key:value 对)集合,键必须是互不相同的(在同一个字典之内)。
1 info = { 2 ‘stu1101‘: "TengLan Wu", 3 ‘stu1102‘: "LongZe Luola", 4 ‘stu1103‘: "XiaoZe Maliya", 5 }
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
基本功能
查找value:
#索引 print( info[‘stu1101‘] ) #key中存在时显示value,如果key不存在则报错
>>>TengLan Wu
print(info.get(‘stu1102‘)) #常用这个,key不存在时返回None,而不是报错
>>>TengLan Wu
print(info.get(‘stu1106‘))
>>>None
查找key:
>>> "stu1102" in info #标准用法 True
修改:
#修改 info[‘stu1102‘] = ‘Alex li‘ print(info) >>>{‘stu1101‘: ‘TengLan Wu‘, ‘stu1102‘: ‘Alex li‘, ‘stu1103‘: ‘XiaoZe Maliya‘}
增加:
# 增加 info[‘stu1104‘] = "Jack Wang" print(info) >>>{‘stu1101‘: ‘TengLan Wu‘, ‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1104‘: ‘Jack Wang‘}
删除:
#删除 del info[‘stu1101‘] print(info) >>>{‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘} info.pop(‘stu1102‘) #和del 相同 print(info) >>>{‘stu1101‘: ‘TengLan Wu‘, ‘stu1103‘: ‘XiaoZe Maliya‘} info.popitem() #随机删除 print(info) >>>{‘stu1101‘: ‘TengLan Wu‘, ‘stu1102‘: ‘LongZe Luola‘}
其他功能
字典生成列表
#key列表 ret = info.keys() print(ret) #value列表 ret = info.values() print(ret) #key-value列表 ret = info.items() print(ret) >>> dict_keys([‘stu1101‘, ‘stu1102‘, ‘stu1103‘]) dict_values([‘TengLan Wu‘, ‘LongZe Luola‘, ‘XiaoZe Maliya‘]) dict_items([(‘stu1101‘, ‘TengLan Wu‘), (‘stu1102‘, ‘LongZe Luola‘), (‘stu1103‘, ‘XiaoZe Maliya‘)])
其他增加、修改字典的方法
#setdefault >>> info.setdefault("stu1106","Alex") #没有1106,就创建新的Key ‘Alex‘ >>> info {‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1106‘: ‘Alex‘} >>> info.setdefault("stu1102","龙泽萝拉") #存在1102,就不再创建,也不更改原有值 ‘LongZe Luola‘ >>> info {‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1106‘: ‘Alex‘}
#update >>> info {‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1106‘: ‘Alex‘} >>> b = {1:2,3:4, "stu1102":"龙泽萝拉"} >>> info.update(b) >>> info {‘stu1102‘: ‘龙泽萝拉‘, 1: 2, 3: 4, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1106‘: ‘Alex‘}#存在的key,更新数据:不存在的Key,创建新数据
#通过一个列表生成默认dict,有个没办法解释的坑,少用吧这个 c = dict.fromkeys([1,2,3],‘testd‘) print(c) >>>{1: ‘testd‘, 2: ‘testd‘, 3: ‘testd‘} c[1] = "yang" print(c) >>>{1: ‘yang‘, 2: ‘testd‘, 3: ‘testd‘} d = dict.fromkeys([4,5,6],[1,{"name":"alex"},55]) print(d) >>>{4: [1, {‘name‘: ‘alex‘}, 55], 5: [1, {‘name‘: ‘alex‘}, 55], 6: [1, {‘name‘: ‘alex‘}, 55]} d[4][1][‘name‘] = "Yang" #坑在此,浅拷贝 print(d) >>>{4: [1, {‘name‘: ‘Yang‘}, 55], 5: [1, {‘name‘: ‘Yang‘}, 55], 6: [1, {‘name‘: ‘Yang‘}, 55]}
字典的循环
#循环的是key
for i in info: print(i) >>> #默认为输出KEY stu1101 stu1102 stu1103 #输出value,建议使用 for i in info: print(i,info[i]) >>> stu1101 TengLan Wu stu1102 LongZe Luola stu1103 XiaoZe Maliya #另一个输出value的方法,生成列表运行会慢 for k,v in info.items(): print(k,v) >>> stu1101 TengLan Wu stu1102 LongZe Luola stu1103 XiaoZe Maliya