文章目录

  • 1. 添加键-值对
  • 2. 可以先创建一个空字典,然后再往里面添加键值对
  • 3. 修改字典中的值
  • 4. 删除键-值对
  • 5. 由类型对象组成的字典
  • 6. 遍历字典
  • 6.1 遍历键-值对
  • 6.2 遍历字典中所有的键
  • 7. 按顺序遍历字典中所有的键
  • 7.1 遍历字典中所有的值
  • 8. 嵌套
  • 8.1 字典列表
  • 8.2 列表字典
  • 在字典中存储字典

Python字典用于将相关信息关联起来. 字典是一系列的键值对

alien = {'color': 'red', 'points': 5}
print(alien['color'])
print(alien['points'])

python 空字典里加数据 python向空字典里添加键值对_python 空字典里加数据

1. 添加键-值对

字典是一种动态结构,可随时在其中添加键值对. 要添加键值对,可依次指定字典名,用方括号括起来的键和相关联的值.

alien = {'color': 'red', 'points': 5}
print(alien['color'])
print(alien['points'])
alien['x_position'] = 5
alien['y_position'] = 20
print(alien)

python 空字典里加数据 python向空字典里添加键值对_嵌套_02

2. 可以先创建一个空字典,然后再往里面添加键值对

alien = {}
alien['color'] = 'yellow'
alien['points'] = 5
print(alien)

python 空字典里加数据 python向空字典里添加键值对_python_03

3. 修改字典中的值

alien = {'color': 'yellow', 'points': 5}
print("The alien is " + alien['color'] + ".")
alien['color'] = 'red'
print("The alien now is " + alien['color'] + ".")

4. 删除键-值对

对于不需要的语句,可以使用del语句将其相应的键值对彻底删除.使用del语句时,必须指定字典名和要删除的键.

alien = {'color': 'yellow', 'points': 5}
del alien['color']
print(alien)

python 空字典里加数据 python向空字典里添加键值对_嵌套_04

5. 由类型对象组成的字典

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
print(favorite_languages['jen'])
print(favorite_languages['phil'])

python 空字典里加数据 python向空字典里添加键值对_入门_05

6. 遍历字典

可以遍历字典的键值对,键或者值

6.1 遍历键-值对

方法 items() 返回一个键值对列表
messages = {
    'One': 1,
    'Two': 2,
    'Three': 3,
    'Four': 4,
    'Five': 5,
}
for key, value in messages.items():
    print(key + ' most favourite num is ' + str(value))

python 空字典里加数据 python向空字典里添加键值对_入门_06

6.2 遍历字典中所有的键

可以使用方法 keys() 它会返回一直 键列表,或者不使用任何方法,因为遍历字典时,会默认遍历所有的键.

LiXu = {
    'first_name': 'Li',
    'last_name': 'Xu',
    'age': 19,
    'city': 'CQ',
}
for xu in LiXu:
    print(xu)
print('----------')
for xu in LiXu.keys():
    print(xu)

python 空字典里加数据 python向空字典里添加键值对_python_07

7. 按顺序遍历字典中所有的键

字典总是明确的记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的,这不是问题。因为通常你想要的只是获取键相关联的正确的值。 要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此可是用函数sorted()来获得按特定顺序排列的键列表的副本。

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
    print(name.title() + " , thank you for taking the poll.")

python 空字典里加数据 python向空字典里添加键值对_计算机组成原理_08

7.1 遍历字典中所有的值

可以使用方法 values() , 它可以返回一个值列表
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
for value in favorite_languages.values():
    print(value)

python 空字典里加数据 python向空字典里添加键值对_python 空字典里加数据_09


这种做法是提取字典所有的值,而没有考虑是否重复. 涉及到的值很少时,这也许不是问题,但当涉及到大量的值时,最终的列表可能含有大量的重复项. 为了剔除重复项,可以使用集合(set),集合类似于列表,但不同的是每个元素必须是独一无二的. 可以调用set()方法来找到不包含重复的值的集合.

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'phil': 'python',
}
for favorite_language in set(favorite_languages.values()):
    print(favorite_language)

python 空字典里加数据 python向空字典里添加键值对_python_10

8. 嵌套

有时候,需要将一系列字典存储在列表中,或者将列表作为值存储到字典中,这称为 嵌套 ,嵌套是一种极其强大的功能

8.1 字典列表

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)

python 空字典里加数据 python向空字典里添加键值对_嵌套_11

在下面的示例中,我们使用range()生成了30个外星人.
# 创建一个存储外星人的空列表
aliens = []
# 创建30个绿色的外星人
for alien_number in range(30):
    new_alien = {'color': 'green', 'points': '5', 'speed': 'slow'}
    aliens.append(new_alien)
# 显示前5个外星人
for alien in aliens[:5]:
    print(alien)
print("...")
# 显示创建了多少个外星人
print("Total number of aliens: " + str(len(aliens)))

python 空字典里加数据 python向空字典里添加键值对_嵌套_12


这些外星人都有着相同的特征,但在Python看来,每个外星人都是独立的,这让我们能够独立的修改每个外星人. 在什么时候需要处理成群结队的外星人呢?想象一下,可能随着游戏的进行,有些外星人会变色而且移动速度会加快.必要时,我们可以使用for循环和if语句来修改某些外星人的颜色,例如要将前3个外星人修改为黄色,速度为中等,且值为10个点,可以这样写:

# 创建一个存储外星人的空列表
aliens = []
# 创建30个绿色的外星人
for alien_number in range(0, 30):
    new_alien = {'color': 'green', 'points': '5', 'speed': 'slow'}
    aliens.append(new_alien)
# 修改
for alien in aliens[0:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'middle'
        alien['points'] = 10
# 显示前5个外星人
for alien in aliens[0:5]:
    print(alien)
print("...")
# 显示创建了多少个外星人
print("Total number of aliens: " + str(len(aliens)))

python 空字典里加数据 python向空字典里添加键值对_嵌套_13


经常需要在列表中包含大量的字典,而其中每个字典都包含特定对象的众多信息。例如,你可能需要为网站的每个用户创建一个字典,并将这些字典存储在一个名为users 的列表中。在这个列表中,所有字典的结构都相同,因此你可以遍历这个列表,并以相同的方式处理其中的每个字典。

8.2 列表字典

有时候,需要将列表存储在字典中,而不是将字典存储在列表中。例如,你如何描述顾客点的比萨呢﹖如果使用列表,只能存储要添加的比萨配料;但如果使用字典,就不仅可在其中包含配料列表,还可包含其他有关比萨的描述。

# 存储所点披萨的信息
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)

python 空字典里加数据 python向空字典里添加键值对_嵌套_14


每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。在本章前面有关喜欢的编程语言的示例中,如果将每个人的回答都存储在一个列表中,被调查者就 可选择多种喜欢的语言。在这种情况下,当我们遍历字典时,与每个被调查者相关联的都是一个语言列表,而不是一种语言;因此,在遍历该字典的for 循环中,我们需要再使 用一个for 循环来遍历与被调查者相关联的语言列表:

favorite_languages = {'jen': ['python', 'ruby'],
                      'sarah': ['c'],
                      'edward': ['ruby', 'go'],
                      'phil': ['python', 'haskell'], }
for name, languages in favorite_languages.items():
    print("\n" + name.title() + "'s favorite languages are:")
    for language in languages:
        print('\t' + language.title())

python 空字典里加数据 python向空字典里添加键值对_计算机组成原理_15


为进一步改进这个程序,可在遍历字典的for 循环开头添加一条if 语句,通过查看len(languages) 的值来确定当前的被调查者喜欢的语言是否有多种。如果他喜欢的语言有 多种,就像以前一样显示输出;如果只有一种,就相应修改输出的措辞,如显示Sarah's favorite language is C 。注意: 列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多,很可能有更简单的解决问题的方案

在字典中存储字典

可在字典中嵌套字典,但这样做时,代码可能很快复杂起来。例如,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在 一个字典中,并将该字典作为与用户名相关联的值。在下面的程序中,对于每位用户,我们都存储了其三项信息:名、姓和居住地;为访问这些信息,我们遍历所有的用户名, 并访问与每个用户名相关联的信息字典.

users = {'aeinstein': {'first': 'albert', 'last': 'einstein', 'location': 'princeton', },
         'mcurie': {'first': 'marie', 'last': 'curie', 'location': 'paris', }, }
for username, user_info in users.items():
    print("\nUsername: " + username)
    full_name = user_info['first'] + " " + user_info['last']
    location = user_info['location']
    print('\tFullname: ' + full_name.title())
    print('\tLocation: ' + location.title())

python 空字典里加数据 python向空字典里添加键值对_python_16

请注意,表示每位用户的字典的结构都相同,虽然Python并没有这样的要求,但这使得嵌套的字典处理起来更容易。倘若表示每位用户的字典都包含不同的键,for 循环内部的 代码将更复杂。