python 字典

6 字典

在本章中,你将学习能够将相关信息关联起来的Python字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制,因此我们会演示如何遍 历字典中的数据。另外,你还将学习存储字典的列表、存储列表的字典和存储字典的字典。 理解字典后,你就能够更准确地为各种真实物体建模。你可以创建一个表示人的字典,然后想在其中存储多少信息就存储多少信息:姓名、年龄、地址、职业以及要 描述的任何方面。你还能够存储任意两种相关的信息,如一系列单词及其含义,一系列人名及其喜欢的数字,以及一系列山脉及其海拔等。

6.1 一个简单的字典

一个简单的字典就比如一个游戏中一个人物的信息,把他们相关的信息关联在一起,让其可以查询。

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

这就简单的展示了一个外星人的颜色和击杀所得的点数。

6.2 使用字典

在Python中,字典字典 是一系列键—值对值对 。每个键 都与一个值相关联,你可以使用键来访问与之相关联的值。键—值 对是两个相关联的值。 键和值之间用冒号分隔,而键—值对之间用逗号分隔。

6.2.1 访问键值
alien_0 = {'color': 'green'}
print(alien_0['color'])

这样便会输出它的颜色。

6.2.2 添加键

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

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

该代码便添加了外星人的位置坐标。

6.2.3 先创建一个空字典

先创建一个空的字典,有时是为了方便,有时是必须这样做。

alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)

在{}中什么都不写入便是空字典。在后面也是可以往里面加入东西的。

6.2.4 修改字典中的值 修改字典中的值
alien_0 = {'color': 'green'}
print("The alien is " + alien_0['color'] + ".")
alien_0['color'] = 'yellow'
print("The alien is now " + alien_0['color'] + ".")

像这样便把上面所涉及到的外星人变成了黄色。

6.2.5 删除键 删除键—值对

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

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

这便把外星人信息中的点数删除了。

6.2.6 由类似对象组成的字典

favorite_languages = { 
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }

将一个较大的字典放在了多行中。其中每个键都是一个被调查者的名字,而每个值都是被调查者喜欢的语言。确定需要使用多行来定义字典时,在输入左花 括号后按回车键,再在下一行缩进四个空格,指定第一个键—值对,并在它后面加上一个逗号。此后你再次按回车键时,文本编辑器将自动缩进后续键—值对,且缩进量与第一 个键—值对相同。

6.3 遍历字典

一个Python字典可能只包含几个键—值对,也可能包含数百万个键—值对。鉴于字典可能包含大量的数据,Python支持对字典遍历。字典可用于以各种方式存储信息,因此有多种 遍历字典的方式:可遍历字典的所有键—值对、键或值。

6.3.1 遍历所有的键 遍历所有的键—值对
user_0 = { 'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
    }
for key, value in user_0.items():
    print("\nKey: " + key)
    print("Value: " + value)

这代码用了items()方法,返回了一个键——值。 key和value都是其中的变量。用来打印键和值。

6.3.2 遍历字典中的所有键

在不需要使用字典中的值时,方法keys() 很有用。下面来遍历字典favorite_languages ,并将每个被调查者的名字都打印出来:

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

这样全部打出来的便是键——值中的键。

6.3.3 按顺序遍历字典中的所有键

要以特定的顺序返回元素,一种办法是在for 循环中对返回的键进行排序。为此,可使用函数sorted() 来获得按特定顺序排列的键列表的副本:

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

这便会按照字母顺序来输出键。

6.3.4 遍历字典中的所有值

可使用方法values() ,它返回一个值列表,而不包含任何键。

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
print("The following languages have been mentioned:")
for language in favorite_languages.values():
    print(language.title())

这代码输出的全部就是用户的喜欢的语言。

这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集 合(set)。集合集合 类似于列表,但每个元素都必须是独一无二的:

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    }
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
    print(language.title())

通过对包含重复元素的列表调用set() ,可让Python找出列表中独一无二的元素,并使用这些元素来创建一个集合。

6.4 嵌套

将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套嵌套 。可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。

6.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)

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

在这个列表中,这种方式适合,所有字典的结构都相同,因此你可以遍历这个列表,并以相同的方式处理其中的每个字典。

6.4.2 在字典中存储列表

在前面说到的pizzas订购中,字典中有的结构不同,这种在字典中存储列表就比较适合。

pizza = { 'crust': 'thick',
    'toppings': ['mushrooms', 'extra cheese'],
    }
print("You ordered a " + pizza['crust'] + "-crust pizza " +
"with the following toppings:")
for topping in pizza['toppings']:
    print("\t" + topping)
6.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("\nUsername: " + username)
    full_name = user_info['first'] + " " + user_info['last']
    location = user_info['location']
    print("\tFull name: " + full_name.title())

注意,表示每位用户的字典的结构都相同,虽然Python并没有这样的要求,但这使得嵌套的字典处理起来更容易。倘若表示每位用户的字典都包含不同的键,for 循环内部的 代码将更复杂。

6.5 小结

本章学习了如何定义字典,以及如何使用存储在字典中的信息;如何访问和修改字典中的元素,以及如何遍历字典中的所有信息;如何遍历字典中所有的键-值对、所 有的键和所有的值;如何在列表中嵌套字典、在字典中嵌套列表以及在字典中嵌套字典。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值