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

五,字典(python)

程序员文章站 2022-07-09 19:15:22
...

字典的简单认识

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