Python字典及相关操作

1 认识字典

1.1 字典是什么?

        在 Python 中,【字典(dictionary)】是一系列键值对(key-value pair)。每个键都与一个值关联,可以使用键来访问与之关联的值。字典用放在花括号({})中的一系列键值对表示,对于每一个键值对,“” 与 “” 之间用冒号(:)隔开,相邻键值对之间用逗号(,)隔开。可以将任意 Python 对象用作字典中的值,而键可以理解为一个变量名。字典可存储的信息量几乎不受限制。

1.2 字典长什么样?

        下面是一个简单的字典,用来存储A同学的相关信息,字典中包含3个键值对,'name' 是键,与之关联的值是 'Alice''age' 是键,与之关联的值是 21'class' 是键,与之关联的值是 104

student_A={'name':'Alice','age':21,'class':104}

        让Python打印出字典,Python将打印字典的内部表示,包括大括号:

{'name':'Alice','age':21,'class':104}

1.3 访问字典中的值

        要获取与键关联的值,可指定字典名,并把键放在后面的方括号中:

print(student_A['name'])

        这将返回字典student_A中与键‘name’关联的值:

Alice

2 对字典进行操作

2.1 添加键值对

        要添加键值对,可依次指定字典名用方括号括起来的键与该键关联的值

        下面在字典student_A中添加两项信息:该同学的学校和专业

student_A={'name':'Alice','age':21,'class':104}

student_A['university']='ABC'
student_A['major']='math'

print(student_A)

-------------------------------------以下为打印结果
{'name':'Alice','age':21,'class':104,'university':'ABC','major':'math'}

        字典会保留定义时的元素排列顺序,如果将字典打印出来或遍历其元素,将发现元素的排列顺序与其添加顺序相同。

2.2 修改字典中的值

        要修改字典中的值,可依次指定字典名用方括号括起来的键与该键关联的新值。如下,将student_A的专业改为化学:

student_A={'name':'Alice','age':21,'class':104}

student_A['university']='ABC'
student_A['major']='math'

student_A['major']='chemistry'


print(student_A)

-------------------------------------以下为打印结果
{'name':'Alice','age':21,'class':104,'university':'ABC','major':'chemistry'}

        在最新的字典student_A中,'major' 对应的值已经变成了 'chemistry' 。

2.3 删除键值对

        可使用 del 语句将相应的键值对彻底删除。在使用del语句时,必须指定字典名和要删除的键。如下,删除字典 student_A 中的键 'major' 及其值:

student_A={'name':'Alice','age':21,'class':104,'university':'ABC','major':'chemistry'}

del student_A['major']
print(student_A)

-------------------------------------以下为最终打印结果
{'name':'Alice','age':21,'class':104,'university':'ABC'}

2.4 多行定义字典

        当字典较大时,可使用多行来定义字典:在输入左花括号后按回车键,再在下一行缩进4个空格,指定第一个键值对,并在它后面加上一个逗号。此后再按回车键,文本编辑器将自动缩进后续键值对。定义好字典后,在最后一个键值对的下一行添加一个右花括号。一种不错的做法是,在最后一个键值对后面也加上一个逗号,为以后添加键值对做好准备。

student_A={
    'name':'Alice',
    'age':21,
    'class':104,
    'university':'ABC',
    'major':'chemistry',
    }

2.5 使用get()来访问值

        使用放在方括号中的键从字典中获取值可能会引发问题:如果指定的值不存在,就将出错。就字典而言,为避免这种错误,可使用get()方法在指定的键不存在时返回一个默认值。get()方法的第一个参数用于指定键,是必不可少的;第二个参数为当指定的键不存在时要返回的值,是可选的

student_A={'name':'Alice','age':21,'class':104}

point=student_A.get('point','No point value assigned.')
print(point)

-------------------------以下是最终打印结果
No point value assigned.

        如果字典中有键'point',就将获得与之关联的值;如果没有,将获得指定的默认值'No point value assigned.',这种情况下,我们将获得一条清晰的消息,不会引发错误。

❶在调用get()方法时,如果没有指定第二个参数且指定的键不存在,Python将返回值None,这个特殊的值表示没有相应的值。

3 遍历字典

        Python支持遍历所有键值对、只遍历键、只遍历值。

3.1 遍历所有键值对

        可使用for循环和 items() 方法遍历所有键值对。items() 方法返回一个键值对。

student_A={
    'name':'Alice',
    'age':21,
    'class':104,
    }

for key, value in student_A.items():
    print(f"\nKey:{key}")
    print(f"Value:{value}")

-----------------------以下是最终打印结果
Key:name
Value:Alice

Key:age
Value:21

Key:class
Value:104

        for循环依次将每个键值对赋给指定的两个变量(这两个变量可以定义为任何便于理解的名字,不是必须定义为key和value)。

3.2 遍历所有键

使用keys()方法可以遍历字典中的所有键。

student_A={
    'name':'Alice',
    'age':21,
    'class':104,
    }

print("The keys in the dictionary are as follow:")
for key in student_A.keys():
    print(key)

-----------------------以下是最终打印结果
The keys in the dictionary are as follow:
name
age
class

        在遍历字典时,会默认遍历所有的键。因此,如果将上述代码中的

for key in student_A.keys():

        替换为:

for key in student_A:

        输出将不变。

3.3 遍历所有值

可使用values()方法遍历字典中的所有值。

student_A={
    'name':'Alice',
    'age':21,
    'class':104,
    }

print("The values in the dictionary are as follow:")
for a in student_A.values():
    print(a)

-----------------------以下是最终打印结果
The values in the dictionary are as follow:
Alice
21
104

        以上方法提取字典中的所有值,而没有考虑值是否有重复。为剔除重复项,可使用集合(set)❷。

student_A={
    'name':'Alice',
    'age':21,
    'class':104,
    }

print("The values in the dictionary are as follow:")
for a in set(student_A.values()):
    print(a)

        所得结果为一个没有重复元素的列表。

❷集合中的每个元素都必须是独一无二的。

4 嵌套

        有时候,需要将多个字典存储在列表中或将列表作为值存储在字典中,这称为嵌套。可以在列表中嵌套字典,在字典中嵌套列表,在字典中嵌套字典。

4.1 在列表中嵌套字典

alien_0={'color':'green','points':5}
alien_1={'color':'yellow','points':10}
alien_2={'color':'red','points':15}

aliens=[alien_0,alien_1,alien_2]

for alien in aliens:
    print(alien)

----------------------以下是最终打印结果
{'color':'green','points':5}
{'color':'yellow','points':10}
{'color':'red','points':15}

        首先创建三个字典,其中每个字典表示一个外星人。然后将这些字典都存储到一个名为aliens的列表中。最后年,遍历这个列表,将每个外星人都打印出来。

4.2 在字典中嵌套列表

        每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。

# 存储顾客所点披萨的信息
pizza={
    'crust':'thick',
    'toppings':['mushrooms','extra cheese'],
    }

# 概述顾客所点的披萨
print(f"You ordered a {pizza['crust']}-crust pizza "
      "with the following toppings:")

for topping in pizza['toppings']:
    print(f"\t{topping}")

------------------------以下是最终打印结果
You ordered a thick-crust pizza with the following toppings:
	mushrooms
	extra cheese

        首先创建一个字典,其中存储了有关顾客所点披萨的信息。在这个字典中,一个键是'crust',与之关联的值是字符串'thick';另一个键是'toppings',与之关联的值是一个列表,其中存储了顾客要求添加的所有配料。

注意:列表和字典的嵌套层级不应太多。如果嵌套层级比实例中多得多,很可能有更简单的解决方案。

4.3 在字典中嵌套字典

        可以在字典中存储字典,但这样可能会让代码很快变得非常复杂。

users={
    'aeinstein':{
        'first':'albert',
        'last':'einstein',
        'location':'princeton',
        },
    'mcurie':{
        'first':'marie',
        'last':'curie',
        'location':'paris',
        },
    }

for username, user_info in users.items():
    print(f"\nUsername:{username}")
    full_name=f"{user_info['first']}{user_info['last']}"
    location=user_info['location']

    print(f"\tFull name: {full_name.title()}")
    print(f"\tLocation: {location.title()}")

------------------------以下是最终打印结果
Username:aeinstein
	Full name: Alberteinstein
	Location: Princeton

Username:mcurie
	Full name: Mariecurie
	Location: Paris

        首先,定义了一个名为users的字典,其中包含两个键:用户名'aeinstein'和'mcurie'。与每个键关联的值都是一个字典,其中包含用户的名、姓和居住地。然后,遍历字典users,让Python依次将每个键赋给变量username,并依次将与当前键相关联的字典赋给变量user_info。

五 说明

        本文是笔者在学习Python的字典相关章节过程中所作的内容梳理,既是为了方便自己复习,也希望能够帮助到其他正在学习Python的朋友。笔者学习的书籍是由Eric Matthes著、袁国忠译、陶俊杰审、人民邮电出版社出版的《Python编程 从入门到实践》,本文使用的语言和很多例子都来自该书。作为一个编程小白,笔者认为这本书对初学者非常友好,是一本很经典的书;同时,作为一个编程小白,笔者知识水平有限,文中不免会出现部分描述错误。如果有感到困惑的地方,可能就是本文描述不当所致,请移步至其他优秀的博文中寻求解答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值