五,字典(python)

字典的简单认识

1.一个简单的字典
来看一个包含外星人的游戏,这些外星人的颜色和分数各不相同。下面是一个简单的字典,存储有关特定外星人的信息

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

输出

green
5

2.使用字典
在python中,字典是一系列的键值对。每个键都与一个值相关联,你可使用键来访问相关联的值。与键相关联的值可以是数字,字符串,列表乃至字典。事实上,可将任何python对象作为字典中的值。
在 pyhon中,字典用放在花括号{}中的一系列键值对表示,如前面示例

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

键值对是两个相关联的值。指定键时,python将返回与之相关联的值。键与值之间用:隔开,而键值对之间用,隔开。在字典中,想存储多少个键值对都无所谓。
最简单的字典只有一个键值对。
3.添加键值对
要添加键值对,可依次指定字典名,用方括号括括起来的键和相关联的值。

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

输出

{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'position_x': 2, 'position_y': 4}

字典中键值对的排列顺序与定义时相同。
在空字典中添加键值对有时候可提供便利,空字典只有一个{}大括号。

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

输出

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

3.修改字典中的值
要修改字典中的值,可依次指定字典名,用方括号[]括起来的键和要修改的值。
eg:

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

输出

yellow

4.删除键值对
删除 需要使用del语句,使用del语句时,必须指定字典名和键。

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

输出

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

使用get()来访问值
使用放在方括号内的键来获取值时,可能会发生错误。如果指定的键不存在,就会发生错误
eg:

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

输出

  print(alien_0['speed'])
KeyError: 'speed'

就会出现keyerror(键值错误)
就字典而言,我们可以使用get()在指定键不存在时,返回一个默认值。
方法get()的第一个参数用于指定键,是必不可少的;第二个参数为指定的键不存在返回的默认值
eg:

alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = '5'
print_value = alien_0.get('speed', 'not find speed')
print(print_value)

输出

not find speed

若该键存在则返回该键相关联的值。

alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = '5'
print_value = alien_0.get('points', 'not find speed')
print(print_value)

输出

5

如果指定的键有可能不存在,应考虑使用方法get(),而不要使用方括号表示法。
调用get()时,如果第二个参数没有指定且指定的键不存在,python将返回值None。这个特殊值表示没有相应的值。None并非错误,而是一个表示所需值不存在的特殊值。在后面的文章中,我将介绍他的其他用途。

2.遍历字典

1,遍历所有键值对
看到遍历首先要想到的当然是for循环了。
这里以一个网站用户信息为例子。

users_0 = {
    'name': 'xiao_wang',
    'first': 'xiao',
    'last': 'wang',
}
for key,value in users_0.items():
    print(f"\nkey: {key}")
    print(f"value: {value}")

输出

key: name
value: xiao_wang

key: first
value: xiao

key: last
value: wang

要遍历字典的for循环,可声明两个变量,用于存储键值对的键和值,本例中用key存储键,value存储值,这两个变量名称可以使用任意名称。
方法items()返回一个键值对列表。接下来,for循环依次将每一个键值对赋给指定的两个变量。
2.遍历字典中的所有键
若只需要键而不需要值,则可利用方法keys()来获取键。keys()返回的是一个只有键的列表。

users_0 = {
    'name': 'xiao_wang',
    'first': 'xiao',
    'last': 'wang',
}
for xxx in users_0.keys():
    print(xxx.title())

输出

Name
First
Last

3.遍历字典中的所有值
与遍历字典中的所有键类似,遍历所有值需要使用方法values(),它返回一个只有值的列表。
只需把上个代码的kesy改为values()

users_0 = {
    'name': 'xiao_wang',
    'first': 'xiao',
    'last': 'wang',
}
for xxx in users_0.values():
    print(xxx.title())

输出

Xiao_Wang
Xiao
Wang

若列表中有重复的值,则可使用集合(set),集合中的每一个元素都是独一无二的。通过集合我们可以剔除列表中的重复元素,
eg:

languages = {'c', 'python', 'java', 'python', 'c'}
for language in set(languages):
    print(language)
printset(languages))

输出

c
python
java
{'c', 'python', 'java'}

集合与列表的区别是列表用方括号,集合用花括号。
集合与字典的区别是字典中有键值对,集合中无键值对。

嵌套

有时候我们需要把字典存储在列表中或将列表存储在字典中,这称之为嵌套。
在列表中存储字典
eg:

alien_1 = {'color': 'green', 'points': 5}
alien_2 = {'color': 'red', 'points': 10}
alien_3 = {'color': 'yellow', 'points': 15}
aliens = [alien_1, alien_2, alien_3]
for alien in aliens:
    print(alien)

输出

{'color': 'green', 'points': 5}
{'color': 'red', 'points': 10}
{'color': 'yellow', 'points': 15}

2.在字典中存储列表
eg:

user = {
    'name': 'xiao_wang',
    'birthdays': ['year', 'month', 'day'],
}
for birthday in user['birthdays']:
    print(birthday)

输出

year
month
day

3.在字典中存储字典
eg:

users = {
    'user1': {
        'name':'xiao_wang',
        'location': 'beijing',
    },

    'user2': {
        'name': 'xiao_zhao',
        'location': 'shanghai',
    }
}
for user, information in users.items():
    print(f"\nuser: {user}")
    print(f"name: {information['name']}")
    print(f"location: {information['location']}")

输出

user: user1
name: xiao_wang
location: beijing

user: user2
name: xiao_zhao
location: shanghai
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值