Python字典详解
字典特征
1. 字典使用dict表示;
2. 字典基本结构;
info = {
"k1": "v1", # 键值对
"k2": "v2"
}
3. 列表、字典不能作为字典的key;
4. value值可是任何值,并且可以无线嵌套;
5. 字典是无序的;
6. 从字典取值要通过索引key值去取值;(字典是无序的,所以不能通过索引取值);
info = {
"k1": 18,
2: True,
"k3": [
11,
[],
(),
22,
33,
{
'kk1': 'vv1',
'kk2': 'vv2',
'kk3': (11,22),
}
],
"k4": (11,22,33,44)
}
v = info['k1']
print(v)
v = info[2]
print(v)
v = info['k3'][5]['kk3'][0]
print(v)
7. 字典的值可以被删除
del info['k1']
del info['k3'][5]['kk1']
print(info)
8. 关于字典的for循环
for item in info #默认循环的key for item in info.keys #指定循环key for item in info.values #指定循环value for k,v in info.items #指定循环key和value
字典的功能总结
1. 为字典的key增加index
dic = { "k1": 'v1', "k2": 'v2' }
for i, v in enumerate(dic, 1):print(i, v)
2. 根据序列,创建字典,并指定统一的值
v = dict.fromkeys(["k1",123,"999"],123) print(v)
3. 根据Key获取值,key不存在时,可以指定默认值(None)
v = dic['k11111'] print(v) #直接通过key值去获取值,如果key值不存在会报错; v = dic.get('k1',111111) print(v) #推荐使用get的方式获取值,没找到会返回设置的值;
4. 删除并获取值
dic = { "k1": 'v1', "k2": 'v2' } v = dic.pop('k1',90) #如果没有找到要删除的对象,则会返回设置的值90; print(dic,v) k,v = dic.popitem() print(dic,k,v)
5. 设置值
已存在,不设置,获取当前key对应的value值 不存在,设置,获取新设置key对应的value值 dic = { "k1": 'v1', "k2": 'v2' } v = dic.setdefault('k1111','123') print(dic,v)
6. 更新
dic = { "k1": 'v1', "k2": 'v2' } dic.update({'k1': '111111','k3': 123}) print(dic) dic.update(k1=123,k3=345,k5="asdf") print(dic)
7. 为字典增加键值对的普通方法
dic = {}
dic["hello"] = {}
dic["word"] = []
dic["hello"]["good"] = {}
print(dic)
字典应用阶段编程练习 多级大纲查看新增交互程序写法一
#!/bin/bash/env python # -*- conding: utf-8 -*- db = {} path = [] while True: temp = db for item in path: temp = temp[item] print("=============================================================================") print("当前所有子节点是:",list(temp.keys())) print("=============================================================================") name = input(" 1:增加节点;\n 2:查看节点;\n b:退回上一级;\n q:退出所有;\n\n请输入你的选择>>>>>>") if name == "1": x = input("请输入要添加的节点名称:") if x in temp: print("节点已经存在!") else: temp[x] = {} elif name == "2": y = input("请输入要查看的子节点名称:") if y in temp: path.append(y) else: print("输入的子节点不存在") elif name.lower() == "b": if path: path.pop() elif name.lower() == "q": break else: print("输入错误,请重新输入!!!")
字典应用阶段编程练习 多级大纲查看新增交互程序写法二
#!/bin/bash/env python # -*- conding: utf-8 -*- dic = { "植物": { "草本植物": ["风信子", "紫罗兰", "长寿花", "牡丹", "向日葵"], "木本植物": ["梅花", "茉莉花", "梅花", "桂花", "月季"], "水生植物": ["荷花", "芦苇", "香蒲", "菰", "水葱"] }, "动物": { "两栖动物": ["乌龟", "青蛙", "蛇", "蜥蜴", "娃娃鱼"], "禽类": ["乌鸡", "白鸡", "黑鸡", "黄鸡", "黑鸡"], "哺乳动物": ["老虎", "猴子", "斑马", "大象", "老鼠"] } } go = True while go: print("#############################") li1 = [] for i, v in enumerate(dic, 1): print(i, v) li1.append(v) print("=============================") print("提示:i编辑,q退出程序,数字选择进入对应的下一级菜单") ui1 = input("请输入你的选择:") if ui1.isdecimal(): ui1 = int(ui1) if 1 <= ui1 <= i: pass else: print("输入序号超出范围,请重新输入!") continue elif ui1.isalpha(): if ui1.lower() == "q": go = False break elif ui1.lower() == "i": i1 = input("此处增加一级节点,请输入要增加的节点:") dic[i1] = {} continue else: print("输入错误,请重新输入!") continue else: print("输入错误,请重新输入!") continue while go: print("#############################") li2 = [] for i, v in enumerate(dic[li1[ui1 - 1]], 1): print(i, v) li2.append(v) print("=============================") print("提示:i编辑,q退出程序,b回退上一级,数字选择进入对应的下一级菜单") ui2 = input("请输入你的选择:") if ui2.isdecimal(): ui2 = int(ui2) if 1 <= ui2 <= i: pass else: print("输入序号超出范围,请重新输入!") continue elif ui2.isalpha(): if ui2.lower() == "b": li1.clear() break elif ui2.lower() == "q": go = False break elif ui2.lower() == "i": i2 = input("此处增加二级节点,请输入要增加的节点:") dic[li1[ui1 - 1]][i2] = [] continue else: print("输入错误,请重新输入!") continue else: print("输入错误,请重新输入!") continue while go: print("#############################") for v in dic[li1[ui1 - 1]][li2[ui2 - 1]]: print(v) print("=============================") print("提示:i编辑,q退出程序,b回退上一级") ui3 = input("请输入你的选择:") if ui3.isalpha(): if ui3.lower() == "b": del li2[:] break elif ui3.lower() == "q": go = False break elif ui3.lower() == "i": i3 = input("此处增加三级节点,请输入要增加的节点:") dic[li1[ui1 - 1]][li2[ui2 - 1]].append(i3) continue else: print("输入错误,请重新输入!") continue else: print("输入错误,请重新输入!") continue