一、字典( Dictionary )
字典是另一种可变容器模型,且可存储任意类型对象。字典是无序的并且键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
字典的每个键值 key ----> value 对用冒号 “ : ” 分割,每个键值对之间用逗号 “ , ” 分割,整个字典包括在花括号 { } 中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
1、字典的增
#!-*- coding:utf-8 -*-
dic_sel1 = {'name':'Springer', 'age':18, 'hobby':['Java', 'Python', 'C/C++'], 'is_knowledgeable':True}
dic2_sel2 = dict((('name', 'Springer'), ('age', 20)))
print(dic_sel1)
print(dic2_sel2)
2、字典的删
- pop( )
pop( ) 方法删除字典给定键 key 及对应的值,返回值为被删除的值。key 值必须给出。 否则,返回 default 值。
pop(self, key, default)
- clear( )
clear( ) 函数用于删除字典内所有元素。
clear(self)
pop(self, key, default)
- popitem( )
popitem( ) 方法随机返回并删除字典中的一对键和值。如果字典已经为空,却调用了此方法,就报出 KeyError 异常。
popitem(self)
- del
del 语句可以用来删除字典本身。
del dictionary_name
- 实例(Python 3.0+)
#!-*- coding:utf-8 -*-
dic_del1 = {'name':'Springer', 'age':18, 'hobby':'girl'}
dic_del2 = {'a':1, 'b':2, 'c':3, 'd':4}
dic_del3 = { }
del_value = dic_del1.pop('hobby') # 删除元素并返回结果
print(del_value) # girl
print(dic_del1) # {'age': 18, 'name': 'Springer'}
del dic_del1['age']
print(dic_del1) # {'name': 'Springer'}
dic_del1.clear()
print(dic_del1) # {}
del dic_del1
# print(dic_del1) # 因为字典已经不存在,故报错 : NameError: name 'dic_del1' is not defined
print(dic_del2) # {'b': 2, 'c': 3, 'd': 4, 'a': 1}
del_value2 = dic_del2.popitem() # 随机删除某组键值对,并返回删除的值
print(del_value2) # ('b', 2)
print(dic_del2) # {'c': 3, 'd': 4, 'a': 1}
dic_del3.popitem() # 因为字典为空,故报错 : KeyError: 'popitem(): dictionary is empty'
3、字典的改
- update( )
update( ) 函数把字典参数 dict2 的 key / value (键/值) 对更新到字典 dict 里。
update(self, other, kwargs)
- 实例(Python 3.0+)
#!-*- coding:utf-8 -*-
dic_up1 = {'a':1, 'b':3, 'c':3}
dic_up2 = {'a':1, 'b':2, 'd':4, 'e':6}
dic_up1.update(dic_up2) # 如果不存在就加入键值对,如果存在就更新替换
print(dic_up1) # {'c': 3, 'a': 1, 'd': 4, 'b': 2, 'e': 6}
dic_up1['e'] = 5 # 直接更改
print(dic_up1) # {'c': 3, 'a': 1, 'd': 4, 'b': 2, 'e': 5}
4、字典的查
- get( )
get( ) 函数返回指定键的值,如果值不在字典中返回默认值。
get(self, key, default)
- keys( )
keys( ) 方法返回一个可迭代对象,可以使用 list( ) 来转换为列表。
keys(selfs)
- values( )
values( ) 方法返回一个迭代器,可以使用 list( ) 来转换为列表,列表为字典中的所有值。
values()
- items( )
items( ) 方法以列表返回可遍历的(键, 值) 元组数组。
items(self)
- 实例(Python 3.0+)
#!-*- coding:utf-8 -*-
dic_sel1 = {'name':'Springer', 'age':18, 'hobby':['Java', 'Python', 'C/C++'], 'is_knowledgeable':True}
dic2_sel2 = dict((('name', 'Springer'), ('age', 20)))
get_value = dic_sel1.get('name')
print(get_value)
print(dic_sel1['hobby'])
# 以下返回结果类型分别为 dict_keys, dict_values, dict_items,如果想要列表需要转换
print(dic_sel1.keys()) # print(list(dic.keys()))
print(dic_sel1.values()) # print(list(dic.values()))
print(dic_sel1.items()) # print(list(dic.items()))
5、字典的其它方法
- setdefault( )
setdefault( ) 方法和 get( ) 方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。
setdefault(self, key, default)
- copy( )
copy( ) 函数返回一个字典的浅复制。
copy(self)
- fromkeys( )
fromkeys( ) 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
fromkeys(seq, value)
- sort( )
sort( ) 函数用于对原字典进行排序。
sort( )
- 实例(Python 3.0+)
#!-*- coding:utf-8 -*-
dic_sel1 = {'name':'Springer', 'age':18, 'hobby':['Java', 'Python', 'C/C++'], 'is_knowledgeable':True}
dic2_sel2 = dict((('name', 'Springer'), ('age', 20)))
# setdefault 有返回值,如果不存在这个键就添加并返回 True,如果存在这个键就返回这个键对应的值。
value_return_1 = dic2_sel2.setdefault('is_knowledgeable', True)
value_return_2 = dic2_sel2.setdefault('age', 18)
print(dic2_sel2)
print(value_return_1) # True
print(value_return_2) # 20
dic2_sel2['age'] = 18
print(dic2_sel2) # {'age': 18, 'name': 'Springer', 'is_knowledgeable': True}
dic_new = {'a':1, 'b':2, 'c':3, 'd':4}
dic_copy = {'e':5}
dic_copy = dic_new.copy() # 复制字典,如果有内容直接覆盖掉
print(dic_copy)
dic_fromkeys = dict.fromkeys(['a', 'b', 'c'],'test')
print(dic_fromkeys)
# 这里有一个坑 :
dic_fromkeys = dict.fromkeys(['a', 'b', 'c'],[1, 2, 3])
print(dic_fromkeys)
dic_fromkeys['b'][0] = 'test' # 这里并不只是修改了 'b' 这个键所对的值,而是修改了所有的值。
print(dic_fromkeys)
dic_sort = {'a':5, 'b':4, 'c':3, 'd':2, 'e':1}
print(sorted(dic_sort)) # 默认排序键
print(sorted(dic_sort.values())) # 可按需求设置排序对象
二、字典( Dictionary )的遍历
#!-*- coding:utf-8 -*-
dic_demo = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
for i in dic_demo:
print(i, end = '\t') # i 默认为键
print(dic_demo.get(i), end = '\n')
print('----------------')
for i in dic_demo.items():
print(i)
三、三级菜单样例(Python 3.0+)
#!-*- coding:utf-8 -*-
# author : Springer
# 创建一个三级菜单
dic_all = {
'山西省':
{'太原市':['小店区', '迎泽区', '杏花岭区', '万柏林区'],
'大同市':['城区', '矿区', '南郊区', '新荣区'],
'临汾':['尧都区', '曲沃县', '翼城县', '襄汾县']
},
'黑龙江省':
{'哈尔滨':['道里区', '南岗区', '平房区', '松北区'],
'齐齐哈尔':['龙沙区', '建华区', '铁峰区', '昂昂溪区'],
'大庆':['萨尔图区', '龙凤区', '红岗区', '让胡路区']
},
'四川省':
{'成都': ['锦江区', '青羊区', '金牛区', '武侯区'],
'自贡': ['自流井区', '贡井区', '大安区', '沿滩区'],
'德阳': ['中江县', '罗江县', '广汉市', '绵竹市']
}
}
# 定义一个遍历来显示需要展示的内容
def show_all(show_num, user_pro, user_cit):
index = 1
if show_num == 1: # 显示省级
for i in dic_all:
print(index, "\t", i)
index += 1
elif show_num == 2: # 显示市级
for j in dic_all[num_province(user_pro)]:
print(index, "\t", j)
index += 1
elif show_num == 3: # 显示县级
count = len(dic_all[num_province(user_pro)][num_city(user_pro, user_cit)])
list_temp = dic_all[num_province(user_pro)][num_city(user_pro, user_cit)].copy()
for z in range(count):
print(index, "\t", list_temp[z])
index += 1
# 将用户输入的数字转换为对应的地点
def num_address(num_prov, num_cit, num_coun,choose):
str_address = ""
index = 1
if choose == 1: # 省级转换
for i in dic_all:
if index == num_prov:
return i # 返回需要的值
index += 1
elif choose == 2: # 市级转换
for j in dic_all[num_province(num_prov)]:
if index == num_cit:
return j # 返回需要的值
index += 1
elif choose == 3: # 县级转换
for z in range(len( dic_all[num_province(num_prov)][num_city(num_prov,num_cit)])):
if index == num_coun and choose == 3:
str_address = dic_all[num_province(num_prov)][num_city(num_prov,num_cit)][z]
return str_address # 返回需要的值
index += 1
else:
print("Error !")
return str_address # 返回需要的值
# 调用转换函数得到省级名称
def num_province(num_pro):
str_province = num_address(num_pro, 0, 0, 1)
return str_province
# 调用转换函数得到市级名称
def num_city(num_pro, num_cit):
str_city = num_address(num_pro, num_cit, 0, 2)
return str_city
# 调用转换函数得到县级名称
def num_country(num_pro, num_cit, num_cou):
str_country = num_address(num_pro, num_cit, num_cou, 3)
return str_country
# 获取字典中省、市、县的数量,用来判断用户输入是否符合条件
def count_num(pro, con, flag):
if flag == 1:
_index_province = len(list(dic_all.keys()))
return _index_province
elif flag == 2:
_index_city = len( list(dic_all[num_province(pro)].keys()))
return _index_city
elif flag == 3:
_index_country = len( dic_all[num_province(pro)][num_city(pro,con)])
return _index_country
# 开始选择
def start_choose(flag):
quit_flag = True # 设置一个标志位
num_user_province = 0 # 初始化一个数值
print("Welcome to Springer's post office !")
print("Enter 'quit' to exit the program !")
print("Enter 'return' to return to the previous step !")
while quit_flag: # 开始循环选择地名
if flag == 1: # 选择省级
show_all(1, 0, 0) # 显示字典中所有省级地名
num_user_province = input("Please select your provice : ")
if num_user_province.isdigit(): # 判断输入是否符合规范
num_user_province = int(num_user_province)
if 0 < num_user_province < count_num(num_user_province, 0, 1) + 1:
print("\nCurrent selection :", num_province(num_user_province))
flag += 1 # 进入下一级选择
else:
print("\nInput contains illegal characters, please re-enter ! ", end="\n")
flag = 1 # 重新选择
elif num_user_province == 'return': # 返回上一级选择
print("This is the first step !")
flag = 1
elif num_user_province == 'quit': # 用户主动选择退出
print("Looking forward to your next visit !")
quit_flag = False
else:
print("Input contains illegal characters, please re-enter ! ", end="\n\n")
flag = 1
elif flag == 2: # 选择市级
show_all(2, num_user_province, 0) # 显示字典中所有市级地名
num_user_city = input("Please select your city : ")
if num_user_city.isdigit():
num_user_city = int(num_user_city)
if 0 < num_user_city < count_num(num_user_province, num_user_city, 2) + 1: # 判断输入是否符合规范
print("\nCurrent selection :", num_province(num_user_province), num_city(num_user_province, num_user_city))
flag += 1 # 进入下一级选择
else:
print("\nInput contains illegal characters, please re-enter ! ", end="\n")
flag = 2
elif num_user_city == 'return': # 返回上一级选择
flag -= 1
elif num_user_city == 'quit': # 用户主动选择退出
print("Looking forward to your next visit !")
quit_flag = False
else:
print("Input contains illegal characters, please re-enter ! ", end="\n\n")
flag = 2
elif flag == 3: # 选择县级
show_all(3, num_user_province, num_user_city) # 显示字典中所有县级地名
num_user_country = input("Please select your vountry : ")
if num_user_country.isdigit():
num_user_country = int(num_user_country)
if 0 < num_user_country < count_num(num_user_province, num_user_city, 3) + 1: # 判断输入是否符合规范
str_user_address = num_province(num_user_province), \
num_city(num_user_province, num_user_city), \
num_country(num_user_province, num_user_city, num_user_country)
print("\nSuccessful address selection !Current selection :", end="\n")
for i in str_user_address:
print(i, end=" ")
quit_flag = False # 选择完成,退出
else:
print("\nInput contains illegal characters, please re-enter ! ", end="\n")
flag = 3
elif num_user_country == 'return': # 返回上一级选择
flag -= 1
elif num_user_country == 'quit': # 用户主动选择退出
print("Looking forward to your next visit !")
quit_flag = False
else:
print("Input contains illegal characters, please re-enter ! ", end="\n\n")
flag = 3
# 调用函数,开始选择地名
start_choose(1)
本文内容部分取自百度内容,如有雷同部分请见谅。