Python 入门学习08 —— 字典( Dictionary )的增删改查、字典( Dictionary )的遍历及三级菜单样例

这篇博客介绍了Python字典的基本操作,包括如何增加、删除、修改和查找字典元素,详细讲解了各种方法,如pop()、clear()、update()、get()等,并给出了实例演示。此外,还提到了字典的遍历方法和一个三级菜单的Python实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、字典( 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)

result

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'

result

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}

result

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

result

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()))    # 可按需求设置排序对象

result

二、字典( 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)

result

三、三级菜单样例(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)

result


本文内容部分取自百度内容,如有雷同部分请见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值