【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)

程序练习

程序: 三级菜单

要求: 

  1. 打印省、市、县三级菜单
  2. 可返回上一级
  3. 可随时退出程序

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]

posted @ 2017-10-23 17:35  生信杰克  阅读(302)  评论(0编辑  收藏  举报