欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python基础之:字典(dict)型数据结构

程序员文章站 2022-05-19 14:24:00
...

字典(dict)型数据结构

在C语言中,结构体可以将变量与变量之间相关联地储存起来,Python中也有与之类似的一种结构,叫做字典(dict),它能将键key与值value一一对应然后储存起来。

1.字典的建立

前面学过的总结一下:
列表list = ['element_1','element_2',...]
元组tuple = ('element_1','element_2',...)
字典的表示方式为:dict = {'key_1':'value_1','key_2':'value_2',...}

直接定义

设计一个游戏,其中包含一些外星人,这些外星人的颜色和分数各不同,我们要存储这些信息就需要用到字典:

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

print(alien_0['color'])
print(alien_0['points'])

这样就可以初步的建立起了一个dict型结构,传入一个key,其对应的value就被打印出来:

green
5

定义后添加

和列表相同,字典也可以在定义后添加key-value来达到构建字典的目的:

#部分定义
alien_0 = {'color':'green','points':5}

alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)

#空定义
alien_0 = {}

alien_0['color'] = 'green'
alien_0['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}

2. 修改字典中的value

#更改dict中的value
alien_0 = {'color':'green'}
print('The alien is ' + alien_0['color'] + '.')

alien_0['color'] = 'yellow'
print('The alien is ' + alien_0['color'] + '.')
#利用del语句删除key-value
alien_0 = {'color':'green','points':5}
print(alien_0)

del alien_0['points']
print(alien_0)
#更改dict中的value
The alien is green.
The alien is yellow.
#利用del语句删除key-value
{'color': 'green', 'points': 5}
{'color': 'green'}

注意:删除了的key-value永远消失,操作是不可逆的

3. 遍历字典

由于字典是由一个或者无数个key-value构成的,因此在遍历的时候要首先确定需要遍历的是什么,是key-value还是key,或者只是value

#遍历所有的key-value -> dict.items()
user = {
    'username':'[email protected]',
    'passport':'123456',
    'verification code':'SC9D'}
for key,value in user.items():  #此处的key、value可以是任何变量名
    print('\nkey: ' + key)
    print('value: ' +value)
    
#遍历所有的key -> dict.keys()
user = {
    'username':'[email protected]',
    'passport':'123456',
    'verification code':'SC9D'}
for key in user.keys():
    print('key: ' + key)
    
#遍历所有的value -> dict.values()
user = {
    'username':'[email protected]',
    'passport':'123456',
    'verification code':'SC9D'}
for value in user.values():
   print('value: ' +value)
#遍历所有的key-value -> dict.items()

key: username
value: [email protected]

key: passport
value: 123456

key: verification code
value: SC9D

#遍历所有的key -> dict.keys()
key: username
key: passport
key: verification code

#遍历所有的value -> dict.values()
value: [email protected]
value: 123456
value: SC9D

集合set

此处需要补充一下集合的内容。和它的名字一样,集合set具有数学中集合类似的意义:set中的元素不能有重复。set是用来存放key的,因此可以得出key也是一个唯一且不重复的值,那么如果定义了两遍同一个key会怎么样呢?详见上述修改字典的value
下面一个简单的例子来说明set的作用:

favourite_bikes = {
    'hank':'santa cruz',
    'jack':'giant',
    'tim':'specialized',
    'phill':'giant',
    'edward':'specialized'}
for value in set(favourite_bikes.values()):
	print(value)
specialized
giant
santa cruz

可见,无论一个value在list或dict中重复多少次,在转化为set后都有且只有一个

4. 字典的嵌套

a. 字典列表

如果一个项目存在多个类似的字典,而又需要统一管理它们,比如在攻击外星人这种游戏中关于外星人的设定,我们可以用一个总体列表来表示外星人这一群体:

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)
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}

可见,我们仅用一个列表就将所有字典包含起来了,这要操作就方便很多
实际上,我们可能需要自动生成更多外星人,引入range()可以解决这个问题并且可以用条件语句和切片来对字典的value进行修改:

aliens = []

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

#第四个外星人后属性改变
for alien in aliens[4:8]:
	if alien['color'] == 'green':
		alien['color'] = 'yellow'
		alien['points'] = 10
#第八个外星人后属性改变
for alien in aliens[8:]:
	if alien['color'] == 'green':
		alien['color'] = 'red'
		alien['points'] = 15
#显示修改后的情况
for alien in aliens[:10]:
	print(alien)
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'yellow', 'points': 10}
{'color': 'yellow', 'points': 10}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}
{'color': 'red', 'points': 15}

显然,通过综合运用各种方式,我们的目的达到了

b. 字典中嵌套列表

如果同一个key对应多个value,比如,加在披萨中的配料可能不止一种,怎么办?这个时候就需要在字典中嵌套列表来实现:

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)
You ordered a thick-crust pizzawith the following toppings: 
        mushrooms
        extra cheese

c. 在字典中嵌套字典

比如我们需要用爬虫爬取一个网站,但是要用不止一个以上的用户名登录,这个时候就可以用字典嵌套字典:

users = {
	'hank':{
		'username':'[email protected]',
		'passport':'123456',
		'verification code':'SC9D'	
	},
	'tim':{
		'username':'[email protected]',
    	'passport':'654321',
    	'verification code':'BVR3'
	}
}

for user,user_info in users.items():
	print('Hello, ' + user.title() +' Your email is ' + user_info['username'] + '.And your passport is ' + user_info['passport'] + '.Please fill the verification code: ' + user_info['verification code'] + '.')
Hello, Hank Your email is [email protected] your passport is 123456.Please fill the verification code: SC9D.
Hello, Tim Your email is [email protected] your passport is 654321.Please fill the verification code: BVR3.

有内味了蛤hhhhh其实用爬虫填表单的时候正是用的字典来完成。

相关标签: Python学习