#–author:zhaozhao
#date:2020/07/29
字典中的元素是由键值对组成,主键唯一且无序。
① 字典的创建
dic={"name":'zhaozhao','age':18,'hobby':{'girl_name':'bb','age':18},'is_handsome':True}
dic=dict((('name','alex'),))
dic=dict([['name','alex'],])
② 添加
dic={'name':'alex'}
dic['age']=18
# setdefault() 键若存在,返回字典中相应的键对应的值18,不存在则返回此语句的设置值22
ret=dic.setdefault('age',22) # 返回18
# 键不存在,在字典中中增加新的键值对,并返回相应的值 girl
ret2=dic.setdefault('hobby','girl')
③ 删除
dic = {'name': 'zhaozhao', 'age': 18, 'class': 1}
dic.clear() # 清空字典
del dic['name'] # 删除字典中指定键值对
ret=dic.pop('age') # 删除字典中指定键值对,并返回该键值对的值
a = dic.popitem() # 随机删除某组键值对,并以元组方式返回值
del dic # 删除整个字典
④ 改
dic['age']=13
# updata
dic.update(dic2) # 加入所有没有的,若有重复的键则更新值
⑤ 查 通过键去查找
dic={'age': 18, 'name': 'zhaozhao', 'hobby': 'girl'}
len(dic)
print(str(dic)) # 输出字典 字符串类型
type(dic) # 类型
dic['name']
dic.get('name')) # 获取指定键对应的值
list(dic.keys()) # 输出键值
list(dic.values()) # 输出值
list(dic.items()) # 输出所有条款
print(5 in dic) # 判断5是否在键中
print(sorted(dic.items())) # 按照键排序 不可存在字母和数字一起排序的情况
sorted(dic.values()) # 按照值排序
for i in a.values():
print(i)
for i in a.items():
print(i)
for k,v in a.items():
print(k,v)
⑥ 其他操作以及涉及到的方法
dic=dict.fromkeys(['host1','host2','host3'],'test')#相当于格式化
# {'host3': 'test', 'host1': 'test', 'host2': 'test'}
dic['host2']='abc' # 更改
# {'host3': 'test', 'host1': 'test', 'host2': 'abc'}
dic=dict.fromkeys(['host1','host2','host3'],['test1','tets2'])
# {'host1': ['test1', 'tets2'], 'host2': ['test1', 'tets2'], 'host3': ['test1', 'tets2']}
dic['host2'][1]='test3'
# {'host1': ['test1', 'test3'], 'host2': ['test1', 'test3'], 'host3': ['test1', 'test3']}
# 相当于都改为test3
⑦ 嵌套字典的应用
menu={'zhaozhao':{"sex":{"g":{},},
"home":{"x":{},},
},
"xiaotang":{"sex":{"g":{},},
"home":{"hn":{},},},
"junge":{"sex":{"g":{},},
"home":{"sx":{},},},
"qijie":{"sex":{"g":{},},
"home":{"xj":{},},},
}
current_layer=menu
parent_layer=[]
while True:
for key in current_layer:
print(key)
choice=input(">>").strip()
if len(choice)==0:
continue
if choice in current_layer:
parent_layer.append(current_layer) # 将本层字典加入父层,需要时取出
current_layer=current_layer[choice] # 进入本层的子层
elif choice=="b":
if parent_layer:
current_layer=parent_layer.pop() # 若有回退操作,则在父层中取出。
else:
print ("无此项")