python基础5

字典

在python中,字典是一系列键-值对。每个键都与一个值相关联,你可以使用键来访问相关联的值。相关联的值可以是数字、字符串、列表乃至字典。事实上可以将任何python对象用作字典中的值。

字典的形式是唯一的,但是向字典中添加内容时,是有逻辑的。

按照向字典中添加的内容,字典可以被分为两类:同一对象的不同属性的字典 + 相似对象的同一属性的字典。

字典的基础知识

创建与简单操作

创建字典

1
2
3
4
5
6
alien_0 = {'color':'green','point':5}
print(alien_0)
print(alien_0['color'])
----------------------------------------
{'color': 'green', 'point': 5}
green
  • 在python中,字典用{ }表示;
  • 每个键都与一个值相关联,键和值直接用:隔开,键值对之间用,隔开;
  • 指定字典名和键名时,将返回其对应的值。

添加键-值对

1
2
3
4
5
alien_0['x_position'] = 5
alien_0['y_position'] = 20
print(alien_0)
----------------------------------------
{'color': 'green', 'point': 5, 'x_position': 5, 'y_position': 20}
  • 直接给字典指定新的键-值对,即可完成添加。

修改键-值对

1
2
3
4
alien_0['x_position'] = 0
print(alien_0)
----------------------------------------
{'color': 'green', 'point': 5, 'x_position': 0, 'y_position': 20}
  • 对已有的键名重新指定值,即可修改-键值对。

删除键-值对或字典

1
2
3
4
5
del alien_0['point']
print(alien_0)
del alien_0
------------------------------------------
{'color': 'green', 'x_position': 0, 'y_position': 20}

两类字典的逻辑

上述知识都只是字典的基础知识,在实际中,往往会遇到数量较大的字典创建,这时,我们常常会用到以下两种技巧。

同一对象不同属性字典的创建

1
2
3
4
5
6
7
8
alien_0 = {}

alien_0['color'] = 'green'
alien_0['point'] = 5
alien_0['x_position'] = 0
alien_0['y_position'] = 20

print(alien_0)
  • 先创建一个空的字典,然后不断向里面增加新的键-值对。

类似对象同一属性的字典

1
2
3
4
5
6
7
favorite_languages = {
'jen': "python",
'sarah': 'java',
'edward': 'c',
'phil': 'python',
}
print(favorite_languages)
  • 这种方法和最初的方法类似,只是结构要好一点,同时有一个细节:在最后一组键-值对后写上,方便后续添加。

上面两代码,同时展现了两种类型的字典,这两种类型与现实世界一一对应。比如我们有时需要统计一个人的所用信息,有时需要统计一个学院各个班级的班长的姓名等。灵活运用字典,是对现实世界建模的关键。

遍历字典

与列表相同,字典也可以被遍历以便使用。同样使用FOR循环。

但是有一个细节,需要指定遍历字典的那一部分。

遍历字典中的键-值对(.items())

1
2
3
4
5
6
7
8
9
10
11
12
13
for key, value in alien_0.items():
print(key + ':' + str(value))
for name, language in favorite_languages.items():
print(name + "'s favorite languages is " + language)
------------------------
color:green
point:5
x_position:0
y_position:20
jen's favorite languages is python
sarah's favorite languages is java
edward's favorite languages is c
phil's favorite languages is python
  • 在遍历所有键和值时,需要使用.items()指令,并指定进入for循环的两个变量,第一个变量对应键,第二个变量对应值;
  • 原则上两个变量名可随意命名,但是,最好是遵循以下规则:
    1. 同一对象不同属性的字典使用变量名为:key,value
    2. 类似对象同一属性的字典使用变量名为可描述性的词

遍历字典中的键(.keys())

1
2
3
4
for key in alien_0.keys():
print(key)
for name in favorite_languages.keys():
print('name:'+name)

遍历字典中的值(.values())

1
2
3
4
for value in alien_0.values():
print(value)
for language in favorite_languages.values():
print('language:\t'+language)

字典嵌套

字典与列表之间的相互嵌套与字典之间的嵌套。

通过相互嵌套,完成对复杂事物的建模。

字典列表(在列表中存储字典)

大致是对同一对象不同属性的字典的扩展,多个对象都具有多个相同的属性

字典列表即包含字典的列表。

对某一个具体的对象,我们可以使用一个字典来包含它的全部信息,但是当需要使用多个具有相同特征的对象时,我们还能使用单纯的字典来表达吗?

比如,我们制作消灭外星人的游戏,一个外星人的所有信息比如颜色,大小,分值,位置等等可以放在一个字典里,但是,我们往往需要多个外星人,他们具有相同的属性,只是属性值是不相同的。这时我们需要用到字典列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
aliens = []
# 创建10个相同的外星人的字典列表
for n in range(0,10):
new_alien = {
'color' : 'green',
'point' : 5,
'x_position' : 0,
'y_position' : 20,
}
aliens.append(new_alien)

for alien in aliens:
print(alien)
print('total ' + str(len(aliens)) + ' rows')

# 将第3到第6各外星人的颜色改变为蓝色
for alien in aliens[3:7]:
alien['color'] = 'blue'
print(alien)

for alien in aliens:
print(alien)
print('total ' + str(len(aliens)) + ' rows')

# 如果外星人颜色为blue,则将其位置向左移动5
for alien in aliens:
if alien['color'] == 'blue':
alien['x_position'] = alien['x_position']+5
print(alien)

列表字典(在字典中存储列表)

大致是对类似对象相同属性的扩展,将相同属性的具体属性值拓展到多个

我们知道在字典中,一个键只能对应一个值,该值可以是数字、字符串、列表等等。

在上述例子中,我们都是一个键对应一个值(字符串或者数字),如果我们需要处理一个键对应多条字符串之类的情况,比如上面 favorite_language 的例子,有一个人最爱两三个语言,该如何存储呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
favorite_languages = {
'jen': ["python",'java'],
'sarah': ['java','c'],
'edward': ['c'],
'phil': ['python'],
}
for name, language in favorite_languages.items():
if len(language) == 1:
print('\n'+name.title() + ' loves the language:'+language[0])
elif len(language) > 1:
print('\n'+name.title()+'s favorite languages is:')
for language in language:
print('\t' + language.title())
--------------------------------
Jens favorite languages is:
Python
Java

Sarahs favorite languages is:
Java
C

Edward loves the language:c

Phil loves the language:python

字典字典(在字典中存储字典)

将同一个对象的所用信息存储到一个字典中,然后将对应多个对象的多个字典,以对象名为键,存储到一个字典中。

其逻辑与字典列表相同。都是在处理具有多个相同属性的多个对象的信息存储问题。

与字典列表相比,在字典中存储字典的代码更加复杂。但或许有时候不得不用呢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 创建以三个城市名为键的存储对应城市的城市情形的字典的字典
cites = {}

shijiazhuang = {
'location':'hebei',
'population':1000,
}
beijing = {
'location':'beijing',
'population':10000,
}
tianjin = {
'location':'tianjin',
'population':800
}

cites['shijiazhuang'] = shijiazhuang
cites['beijing'] = beijing
cites['tianjin'] = tianjin

for cite, status in cites.items():
if status['population'] >= 1000:
print('\n'+ cite + ' is big.')
else:
print('\n'+cite+' is ok.')

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!