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

字典(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':'hank.gan@foxmail.com',
    'passport':'123456',
    'verification code':'SC9D'}
for key,value in user.items():  #此处的key、value可以是任何变量名
    print('\nkey: ' + key)
    print('value: ' +value)
    
#遍历所有的key -> dict.keys()
user = {
    'username':'hank.gan@foxmail.com',
    'passport':'123456',
    'verification code':'SC9D'}
for key in user.keys():
    print('key: ' + key)
    
#遍历所有的value -> dict.values()
user = {
    'username':'hank.gan@foxmail.com',
    'passport':'123456',
    'verification code':'SC9D'}
for value in user.values():
   print('value: ' +value)
#遍历所有的key-value -> dict.items()

key: username
value: hank.gan@foxmail.com

key: passport
value: 123456

key: verification code
value: SC9D

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

#遍历所有的value -> dict.values()
value: hank.gan@foxmail.com
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':'hank.gan@foxmail.com',
		'passport':'123456',
		'verification code':'SC9D'	
	},
	'tim':{
		'username':'tim.cook@foxmail.com',
    	'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 hank.gan@foxmail.com.And your passport is 123456.Please fill the verification code: SC9D.
Hello, Tim Your email is tim.cook@foxmail.com.And your passport is 654321.Please fill the verification code: BVR3.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值