Python学习笔记(五)——字典

字典在功能上有点像C中的结构体

一 一个简单的字典

看一个例子,一个字典中包含了一些外星人,这些外星人颜色和点数各不相同。

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

二 使用字典

在Python中,字典是一系列键-值对。每个键都与一个值相关联,我们可以使用键来访问与之关联的值,与键相关的可以是数字字符串,列表乃至字典。

1.访问字典中的值

可依此指定字典名与放在方括号里的键

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

也可以取一个中间变量:

alien_0 = {'color': 'green', 'points': 5}
new_points = alien_0['points']
print("You just earned " + str(new_points) + " points!")

2.添加键-值对

字典是一种动态结构,可以随时在其中添加键-值对。
比如,我们需要知道这个外星人的位置:

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

输出结果:
{‘color’: ‘green’, ‘points’: 5, ‘x_position’: 0, ‘y_position’: 25}

3.先创建一个空字典

我们可以先创建一个空字典,再分行添加键-值对。如题:

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

输出结果;
{‘color’: ‘green’, ‘points’: ‘5’}

4.修改字典中的值

要修改字典中的值,可知道字典名,用方括号括起来指定的键,并赋予相关联的新值

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

我们来看更复杂的一个例子:

alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
print("Original x-position: " + str(alien_0['x_position']))

#向右移动外星人
#据外星人的速度决定其移动多远
if alien_0['speed'] == 'slow':
    x_increment = 1
elif alien_0['speed'] == 'medium':
    x_increment = 2
else:#这个外星人移动的很快
    x_increment = 3

alien_0['x_position'] = alien_0['x_position'] + x_increment
print('Now x_position:' + str(alien_0['x_position']))

我们可以通过if语句决定给外星人移动的值

5.删除键-值对

对于字典中不再需要的值,可以使用del语句将相应的值-键彻底删除

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

del alien_0['points']
print(alien_0)

注意:删除掉的值是永久消失了

6.由类似对象组成的字典

字典不仅可以储存一个对象的多种信息,也可以存储不同对象的信息。例题中存储的是不同人喜欢用的编程语言:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("Phili's faorite language is "+favorite_languages['jen'].title())

三 遍历字典

1.遍历所以的键——值对

第一:要编写能遍历字典的for循环,应该要先声明两个变量:一个代表键,一个代表值
注意,这两个变量可以代表任何值
第二: 字典名和方法items()它返回一个键-值列表。接下来for循环将一次将每个值存储在指定的两个变量中。
注意:即便遍历字典时,键-值对的返回顺序也与存储顺序不同。Python不关心键-值对的存储顺序,而只跟踪键和值之间的关联关系。

user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}

for key,value in user_0.items():
    print('\nKey',key)
    print('\nValue',value)
2.遍历字典中的所有值

在不需要实验字典中的值时,方法key()可以把所有键名打印出来

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

for name in favorite_languages.keys():
    print(name.title());

这里有一个稍微复杂些的例子,我们可以在遍历的基础上加一些操作:

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

friends = ['jen','phil']
for name in favorite_languages.keys():
    print(name.title());
    if name in friends:
        print(name+"'s favorite language is "+favorite_languages[name].title()+"!")

keys()并非只能用于遍历;实际上,它可以返回一个列表,其中包含了字典中所有的键。

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

通常我们获取字典的元素时,获取顺序是不可预测的。我们可以使用函数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.")

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

四 嵌套

有时,我们需要将一些列表存储在字典里,或者将一些字典存储在列表里,这就是嵌套。

1.字典列表

我们的allen只能存储一个外星人的信息,无法同时存储三个。此时例题:

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 = []

for alien_number in range(30):
    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
    aliens.append(new_alien)

for alien in aliens[:5]:
    print(alien)

print("Total number of aliens is "+str(len(aliens)))

假如我们需要把前三个外星人修改成黄色的,速度变成中等,且值为十个点:

aliens = []

for alien_number in range(30):
    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
    aliens.append(new_alien)

for alien in aliens[0:3]:#alien是指字典
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['points'] = 10
        alien['speed'] = 'medium'

for alien in aliens[0:5]:
    print(alien)

print("Total number of aliens is "+str(len(aliens)))

我们可以进一步扩展改程序,比如利用elif把黄色外星人改为红色等等

2.在字典中存储列表

当我们需要将一个键关联到多个关联词时,可以使用到嵌套:

pizzas = {
    'crust':'thick',
    'toppings':['mushrooms','extra chess']
}

print("you want a"+pizzas['crust']+"-crust pizza")
print("wint toppings:")
for topping in pizzas['toppings']:
    print("\t"+topping)

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())
    print("\tLocation: " + location.title())
上一篇:【笔记2021-10-27】if 字典 Python


下一篇:奇思妙想之超级魔改版外星人入侵小游戏-01