【Python3】字典
字典是key - value 数据类型
创建
info = {
'stu01': 'jack',
'stu02': 'mike',
'stu03': 'jay'
}
字典的特性:
- dict是无序的
- key必须是唯一的,天生去重
增
>>>info['stu05'] = 'kit' #自动创建
{'stu01': 'jack','stu02': 'mike','stu03': 'jay','stu05','kit'}
删
>>> info.pop("stu03") #标准删除,必须加参数 {'stu01': 'jack','stu02': 'mike'}
>>> del info['stu03'] #通用删除 {'stu01': 'jack','stu02': 'mike'}
>>> info.popitem() #随机删除 {'stu01': 'jack','stu03': 'jay'}
改
>>>info['stu02'] = 'bob'
{'stu01': 'jack','stu02': 'bob','stu03': 'jay'}
查
>>> ‘stu02’ in info #标准用法
True
>>> info.get(‘stu02’) #获取
'mike'
>>> info["stu1105"] #如果一个key不存在,就报错,get不会,不存在只返回None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'stu1105'
多级字典嵌套及操作
city = { '亚洲':{ '中国':['北京','上海','广州'], '俄罗斯': ['莫斯科','圣彼得堡'], '日本': ['东京','名古屋','大阪'] }, '欧洲':{ '英国':['伦敦','伯明翰'] }, '大洋洲':{ '澳大利亚':['悉尼','堪培拉'] } }
city[亚洲][中国][2]='深圳' #将广州改成深圳
其他
#values
>>> info.values()
['jack', 'mike','jay']
#keys
>>> info.keys()
['stu01','stu02', 'stu03']
#setdefault #键值存在则罢,不存在的增
>>> info.setdefault('stu06','jane')
{'stu01': 'jack','stu02': 'mike','stu03': 'jay','stu06','jane'}
>>> info.setdefault('stu02','jane')
{'stu01': 'jack','stu02': 'mike','stu03': 'jay'}
#update #合并字典,若键值重复,则覆盖
>>> b = {1:2,3:4,'stu01':'kit'}
>>> info.update(b)
{'stu01': 'kit','stu02': 'mike','stu03': 'jay',1:2,3:4}
#items #字典转列表,里面是元祖
>>>info.items()
[('stu01': 'jack'),('stu02': 'mike'),('stu03': 'jay')]
#通过一个列表生成默认dict
>>> dict.fromkeys([1,2,3],'testd')
{1: 'testd', 2: 'testd', 3: 'testd'}
>>>c=dict.fromkeys([1,2,3],['jack','sandra'])
>>>c[2][1]='happy' #全改了
{1:['jack','happy'],3:['jack','happy'],3:['jack','happy']}
循环
#方法1
for key in info: #高效
print(key,info[key])
#方法2
for key,value in info.items(): #先把dict转成list,数据大时莫用
print(key,value)
程序练习
程序: 三级菜单
要求:
- 打印省、市、县三级菜单
- 可返回上一级
- 可随时退出程序
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
exit_flag = False
current_layer = menu
layers = [menu]
while not exit_flag:
for k in current_layer:
print(k)
choice = input(">>:").strip()
if choice == "b":
current_layer = layers[-1]
#print("change to laster", current_layer)
layers.pop()
elif choice not in current_layer:continue
else:
layers.append(current_layer)
current_layer = current_layer[choice]