Python编程:从入门到实践-第6章字典

6.字典

6.1字典的使用

字典是一系列键值对,每个都与一个值相关联,可以使用来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可以将任何python对象作为字典中的值。字典可存储的信息量几乎不受限制。字典用放在花括号{}中的一系列键值对表示。示例如下:

alien={'color':'green','points':5}

6.1.1访问字典中的值

要获取和访问字典中与键相关联的值,可依次指定字典名和放在方括号内的键。示例如下:

alien={'color':'green','points':5}
print(alien['color'])
print(alien['points'])

输出结果为:

green
5

同样,可以将字典中获取的值赋给变量并使用。示例如下:

alien = {'color':'green','points':5}
new_points = alien['points']
print(f'You just earned {new_points} points!')

输出结果为:

You just earned 5 points!

6.1.2添加键值对

字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名、用方括号括起来的键和相关联的值。示例如下:

alien = {'color':'green','points':5}
alien['x_position'] = 0
alien['y_position'] =25
print(alien)

输出结果为:

{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25}

此时原本的字典中添加了值为0的’x_position’键和值为25的’y_position’键。
有时在空字典中田间键值对可能更为便利,因此也可以先创建一个空字典,再分行添加各个键值对。示例如下:

alien_1 = {}
alien_1['color'] = 'red'
alien_1['points'] = 10
print(alien_1)

输出结果为:

{'color': 'red', 'points': 10}

###6.1.3修改字典中的值
要修改字典中的值,可依次指定字典名、用方括号括起来的键,以及与该键相关联的新值。示例如下:

alien = {'color':'green','points':5}
alien['color'] = 'yellow'
print(alien)

输出结果为:

{'color': 'yellow', 'points': 5}

此时外星人的颜色已经变成了黄色。可结合if语句进行更为复杂的操作。示例如下:

#定义一个外星人,包含初始坐标和速度
alien = {'x_position':0,'y_position':25,'speed':'medium'}
#输出外星人的原始x坐标:
print(f"Original x_position:{alien['x_position']}")
#向右移动外星人,根据当前速度确定移动距离
if alien['speed'] == 'slow':
    x_increment = 1
elif alien['speed'] == 'medium':
    x_increment = 2
else:
    x_increment =3
#新位置为旧位置加上移动距离
alien['x_position'] = alien['x_position'] + x_increment
#输出新位置
print(f"New x_position: {alien['x_position']}")

输出结果如下:

New x_position: 2

6.1.4删除键值对

对于字典中不需要的信息,可以使用del语句将相应的键值对彻底删除,使用时必须指定字典名和要删除的键。示例如下:

alien = {'color':'green','points':5}
del alien['points']
print(alien)

输出结果如下:

{'color': 'green'}

此时,原本的字典中只剩下颜色键值对。

6.1.5由类似对象组成的字典

在以上示例中,字典存储的是一个对象的多种信息,但其实也可以用字典来存储众多对象的同一种信息。确定需要使用字典来存储多对象的同一信息时,需要注意以下几点:

  • 在输入左花括号后按回车键;
  • 在下一行缩进四个空格;
  • 指定第一个键值对后在它后面加上一个逗号;
  • 在每个键值对后都加上一个逗号(最后一个也);
  • 在最后一个键值对的下一行添加一个右花括号
    示例如下:
favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'java',
    }

给定键值对的键,可轻松获得相关联的值。示例如下:

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'java',
    }
language = favorite_languages['sarah'].title()
print(f"Sarah's favorite language is {language}.")

输出结果为:

Sarah's favorite language is C.

###6.1.6使用get()来访问值
使用放在方括号内的键从字典中获取值时,若指定的键不存在会进行报错。示例如下:

alien = {'color':'green','points':5}
print(alien['speed'])

输出结果为:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'speed'

为避免此类错误,可使用**get()**在指定的键不存在时返回一个默认值。使用方法为:dict.get(‘key’,‘value’),其中key表示需要指定的键,value表示当指定的键不存在时要返回的值,value可以为空,此时将返回“None”。示例如下:

alien = {'color':'green','points':5}
speed_value = alien.get('speed','No speed value assigned.')
print(speed_value)

speed_value = alien.get('speed')
print(speed_value)

输出结果为:

No speed value assigned.
None

6.2遍历字典

6.2.1遍历所有键值对

要遍历字典中所有的键值对,可使用for循环。使用方法为:
  1.声明两个变量,用于存储键值对中的键和值。这两个变量可以使用任意名称,一般常用key来表示键,value来表示值;
  2.第二部分包含字典名和方法item(),用以返回一个键值对列表;
  3.使用这两个变量来打印每个键及相关联的值。
示例如下:

favorite_number = {
    'faxxtty':5,
    'miumiu':7,
    'tingting':9,
    'gege':2,
    'pangpang':8,
    }
for key,value in favorite_number.items():
    print(f'\nKey:{key}')
    print(f'Value:{value}')

输出结果如下:

Key:faxxtty
Value:5

Key:miumiu
Value:7

Key:tingting
Value:9

Key:gege
Value:2

Key:pangpang
Value:8

当字典中存储的是不同人的同一信息时,遍历所有的键值对就很合适。对于上面不同人喜欢的语言的示例,在循环中使用变量name和language使表达更明了。示例如下:

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'java',
    }
for name,language in favorite_languages.items():
    print(f"{name.title()}'s favorite language is {language.title()}.")

输出结果如下:

Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Ruby.
Phil's favorite language is Java.

6.2.2遍历所有键:方法key()

  • 提取字典中所有的键。使用dict.keys() 示例如下:
favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'java',
    }
for name in favorite_languages.keys():
    print(name.title())

输出结果为:

Jen
Sarah
Edward
Phil

事实上,遍历字典时,会默认遍历所有的键,因此语法dict.keys()也可以被省略。示例如下:

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'java',
    }
for name in favorite_languages:
    print(name.title())

此时输出结果依然如上。

  • 在这种循环中,也可以使用当前键来访问与之相关的值。示例如下:
favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'java',
    }
friends = ['phil','sarah']
for name in favorite_languages.keys():
    print(f'Hi {name.title()}.')
    if name in friends:
        language = favorite_languages[name].title()
        print(f'\t{name.title()}, I see you love {language}!')

输出结果如下:

Hi Jen.
Hi Sarah.
        Sarah, I see you love C!
Hi Edward.
Hi Phil.
        Phil, I see you love Java!
  • 更甚,可以使用keys()来核实字典中不存在的键。示例如下:
favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'java',
    }
if 'erin' not in favorite_languages.keys():
    print('Eric,please take our poll.')

输出结果为:

Eric,please take our poll.

6.2.3按特定顺序遍历字典中的所有键

要以特定的顺序返回元素,可以在for循环中对返回的键进行排序。可使用函数sorted() 来获得按特定顺序排列的键列表的副本。示例如下:

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'java',
    }
for name in sorted(favorite_languages.keys()):
    print(f'{name.title()},thank you for taking the poll.')

输出结果为:

Edward,thank you for taking the poll.
Jen,thank you for taking the poll.
Phil,thank you for taking the poll.
Sarah,thank you for taking the poll.

6.2.4遍历字典中所有的值

提取字典中所有的值。使用dict.values() 示例如下:

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for language in favorite_languages.values():
    print(language.title())

输出结果为:

Python
C
Ruby
Python

这种方法虽然提取字典中所有的值,但没有考虑值是否有重复。为剔除重复项,可使用集合(set) ,集合中每个元素要求是独一无二的。示例如下:

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for language in set(favorite_languages.values()):
    print(language.title())

此时输出结果变为:

Python
Ruby
C

事实上,可以使用一对花括号直接创建集合,并在其中用逗号分隔元素。 示例如下:

languages = {'python','ruby','python','c'}
languages

输出结果为:

{'python', 'ruby', 'c'}

注意:集合和字典非常容易混淆,当花括号内没有键值对时,定义很可能是集合 ,不同于列表和字典,集合不会以特定的顺序存储元素

6.3嵌套

将一系列字典存储在列表中,或者将列表作为值存储在字典内,即称为嵌套。可以在列表中嵌套字典、在字典中嵌套列表或者在字典中嵌套字典。

6.3.1在列表中存储字典

以下为创建一个列表中包含三个字典的示例:

alien_0 = {'color':'red','point':5}
alien_1 = {'color':'orange','point':7}
alien_2 = {'color':'yellow','point':9}

aliens = [alien_0,alien_1,alien_2]
for alien in aliens:
    print(alien)

输出结果为:

{'color': 'red', 'point': 5}
{'color': 'orange', 'point': 7}
{'color': 'yellow', 'point': 9}

6.3.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('\t' + topping)

输出结果为:

You ordered a thick-crust pizza with the following toppings:
        mushrooms
        extra cheese

6.3.3在字典中存储字典

示例如下:

users = {
    'aeintein':{
        '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:aeintein
        Full name:Alberteinstein
        Location:Princeton

Username:mcurie
        Full name:Mariecurie
        Location:Paris
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值