1.10.1 字典
在Python中 字典是一系列键值对,每个键都与一个值相关联。
注意:键跟值之间用冒号分隔,你存储多少个键值都是可以的。
访问字典里面值的格式如下
alien_0={'color':'green'}
print(alien_o['color']
1)动态增加键值对的代码如下:
alien_0={}
alien_0['y_position']=25
alien_0['x_position']=0
alien_0['color']='green'
alien_0['point']=10
print(alien_0)
{‘color’: ‘green’, ‘y_position’: 25, ‘point’: 10, ‘x_position’: 0}
2)修改字典中的值
alien_0={'color':'green'} #建立字典的时候用的是大括号而不是中括号
print("The alien color is : "+alien_0['color']+".") #取字典的时候用的是中括号
alien_0['color']='Yellow'
print("The alien color is : "+alien_0['color']+".")
The alien color is : green.
The alien color is : Yellow.
如果在游戏中 对一个能够以不同速度移动的外星人的位置进行跟踪。我们应该存储外星人当前的速度,并且根据此确定该外星人将向右移动多远:
alien_0={'x_position':0,'y_position':25,'speed':'medium'}
print("Original x-position:"+str(alien_0['x_position']))
if alien_0['speed']=='slow': #如果判断到速度为slow的话就是对应着速度步进+1
x_increment=1
elif alien_0['speed'] == 'medium': #如果判断到速度为medium的话就是对应着速度步进+2
x_increment=2
else: #除此之外速度肯定很快
x_increment=3
alien_0['x_position']=alien_0['x_position']+x_increment
print("New x_position:"+str(alien_0['x_position']))
Original x-position:0
New x_position:2
我们可以直接通过调用:alien_0[‘speed’]中的值改变外星人的速度。
3)删除键值对
我们如果不需要用到字典中的元素了的话 我们可以直接使用之前学到的命令: del
进行删除,代码如下,重温一下:
alien_0={'color':'green','point':5}
print(alien_0)
del alien_0['point']
print(alien_0)
{‘point’: 5, ‘color’: ‘green’}
{‘color’: ‘green’}
**注:输出的列表顺序跟我们定义的列表定义不同
Python不关心键值对存储顺序,而只是跟踪键和值之间的关联关系。**
1.10.2 遍历所有的键值—-对
Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
dicts={
'del':'删除',
'append':'增加',
'insert':'插入',
'puts':'输出',
'inputs':'输入',
}
for key,value in dicts.items():
print(key+':'+value)
del:删除
inputs:输入
insert:插入
append:增加
puts:输出
1.10.3 遍历字典中的所有键
在我们不需要使用字典中的值的时候,方法keys()很有用。
favorite_languages={
'jen':'python',
'sarah':'c',
'edward':'rubby',
'phil':'python',
}
for name in favorite_languages.keys():#遍历字典时候,会默认遍历所有的键值,出于更好理解 建议用keys()
print(name.title())
print("\n")
for name in favorite_languages:#这两条语句的输出结果都是一样的
print(name.title())
Jen
Phil
Edward
Sarah
Jen
Phil
Edward
Sarah
favorite_languages={
'jen':'python',
'sarah':'c',
'edward':'rubby',
'phil':'python',
}
friend=['phil','sarah']
for name in favorite_languages.keys():
print(name.title())
if name in friend:
print("Hi"+name.title()+",I see your favorite language is "+favorite_languages[name].title()+"!")
**Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level:
1.对于此错误,最常见的原因是,的确没有对齐。但是我根据错误提示的行数,去代码中看了下,没啥问题啊。
都是用TAB键,对齐好了的,没有不对齐的行数啊。**
*1.10.4 按顺序遍历字典中的所有值
favorite_languages={
'jen':'python',
'sarah':'c',
'edward':'rubby',
'phil':'python',
}
friend=['phil','sarah']
for name in sorted(favorite_languages.keys()):
print(name.title())
Edward
Jen
Phil
Sarah
1.10.3 遍历字典中的所有值
既然可以只读字典里面的键,那么就也一样可以都字典里面的值:
favorite_languages={
'jen':'python',
'sarah':'c',
'edward':'rubby',
'phil':'python',
}
friend=['phil','sarah']
for name in favorite_languages.values():
print(name.title())
Python
Python
C
Rubby
从结果我们可以看到 达到我们的目的了 把字典里所有的值都读出来了,但是我们同时也可以发现,python出现两次,有些时候 我们需要的只是不重复的值,剔除重复,python的另一个函数就可以达到目的了set()
favorite_languages={
'jen':'python',
'sarah':'c',
'edward':'rubby',
'phil':'python',
}
friend=['phil','sarah']
for name in set(favorite_languages.values()):
print(name.title())
C
Python
Rubby
强大的python的一些函数 在我们处理数据的时候能起到很大的作用
**课后练一练
6-4**
dicts={
'del':'删除',
'append':'增加',
'insert':'插入',
'puts':'输出',
'inputs':'输入',
}
for key,value in dicts.items():
print(key+':'+value)
print("\n")
dicts['if']='如果'
dicts['print']='打印'
dicts['set']='集合'
dicts['sorted']='排序'
dicts['else']='否则'
for key,value in dicts.items():
print(key+':'+value)
del:删除
inputs:输入
puts:输出
insert:插入
append:增加
del:删除
inputs:输入
else:否则
set:集合
append:增加
if:如果
sorted:排序
puts:输出
insert:插入
print:打印
6-5
rivers = {'Nile': 'egypt', 'Changjiang': 'china', 'Huanghe': 'china'}
for river,country in rivers.items():
print(river+"run through "+country)
for river in rivers.keys():
print(river)
for country in rivers.values():
print(country)
6-6
peoples={'jen','Harjerk','Jack','bruse','phil'}
for name in favorite_languages.keys():
if name in peoples:
print("Hi"+name.title()+",Thank you very much!")
else:
print(name.title()+", Please take our poll!")
1.10.4 嵌套
有时候,需要将一系列字典存储在列表中,或者将列表中作为值存储在字典中,这称为嵌套。
1)字典列表
比如我们一个字典只包含一个外星人的信息,但是无法存储第二个外星人的信息。我们可以跟下面的一样,想办法创建一个外星人列表
alien_0={'color':'green','point':5}
alien_1={'color':'red','point':6}
alien_2={'color':'yellow','point':7}
aliens=[alien_0,alien_1,alien_2]
for alien in aliens:
print(alien)
但是我们现实中,我们的外星人不止三个,且每个外星人都是用代码自动生成的。
aliens=[]
for alien_number in range(30): #rang 范围 30个数
new_alien={'color':'green','point':5,'speed':'slow'}
aliens.append(new_alien)
for alien in aliens[:5]:#切片的知识,只显示前5个信息
print(alien)
print("...")
print("Total number of aliens :" +str((len(aliens))))
{‘speed’: ‘slow’, ‘point’: 5, ‘color’: ‘green’}
{‘speed’: ‘slow’, ‘point’: 5, ‘color’: ‘green’}
{‘speed’: ‘slow’, ‘point’: 5, ‘color’: ‘green’}
{‘speed’: ‘slow’, ‘point’: 5, ‘color’: ‘green’}
{‘speed’: ‘slow’, ‘point’: 5, ‘color’: ‘green’}
…
Total number of aliens :30
2)当我们需要更改外星人的颜色还有外星人速度以及得分的时候 可以通过下面的程序来参考更改:
aliens=[]
for alien_number in range(30): #rang 范围 30个数
new_alien={'color':'green','point':5,'speed':'slow'}
aliens.append(new_alien) #循环30次把 外星人的信息全部添加进去
for alien in aliens[0:3]: # 循环前3组变量
if alien['color']=='green': #进入循环后判断机器人的颜色是否是绿色的,是的话进行修改
alien['color'] ='yellow' #赋值相关的参数
alien['point'] = '10'
alien['point'] = 'medium'
for alien in aliens[:5]:#切片的知识,只显示前5个信息
print(alien)
print("...")
print("Total number of aliens :" +str((len(aliens))))
1.10.4 在字典中存储列表
for name,languages in favorite_languages.items():
if len(languages)==1:
print("\n" + name.title() + "'s favorite languages is:")
else :
print("\n" + name.title() + "'s favorite languages are:")
for language in languages:
print("\t" + language.title())