Python编程笔记6字典

Python编程学习笔记,第6记:数据结构之字典

          本节将学习:能够将相关信息关联起来的Python字典。如何定义字典、如何使用存储在字典中的信息、如何访问和修改字典中的元素、如何遍历字典中的所有信息、如何遍历字典中的所有键-值对和所有的键以及所有的值、如何在列表中嵌套字典、如何在字典中嵌套列表、如何在字典中嵌套字典……

目录

Python编程学习笔记,第6记:字典

# 1.一个简单的字典

# 2.使用字典

# 2.1访问字典中的值

# 2.2添加键-值对

# 2.3修改字典中的值

# 2.4删除键-值对

# 2.5合并字典

# 2.6删除字典中的所有值

# 3.遍历字典

# 3.1遍历所有的键值对

# 3.2遍历字典中所有的键

# 3.3使用values()方法遍历字典中所有的值

# 集合set()

# 3.4使用copy()将字典复制到另外一个新字典中.

# 4嵌套

# 4.1字典列表:将字典存储在列表里.

# 4.2将列表存储在字典里.

# 4.3在字典中存储字典.


# 1.一个简单的字典

# 一个简单的字典
alien_0 = {'color': 'green', 'point': '5'}
print(alien_0['color'])
print(alien_0['point'])
# 用大括号{}将一系列以逗号隔开的键值对(key:value)包裹起来即可进行字典的创建.

输出结果为:

green
5

# 2.使用字典

  • # 在Python中,字典是一系列键-值对.每个键都与一个值相关联,可以使用键来访问与之相关联的值.
  • # 与键相关联的值可以是数字、字符串、列表、乃至字典.事实上,可以将任何Python对象用作字典中的值.
  • # 在Python中,字典用放在花括号{}中的一系列键-值对表示。
  • # 例如:alien_0 = {'color': 'green', 'point': '5'}
  • # 键-值对是两个相关联的值.指定键时,将返回与之相关联的值.键和值之间用冒号分隔,键-值对之间用逗号分隔.
  • # 最简单的字典是空字典,它不包含任何键-值对:
# 空字典
empty_dict = {}
print(empty_dict)

输出结果为:{}

# 2.1访问字典中的值

  • # 要获取与键相关联的值,可依次指定字典名和放在方括号内的键.
  • # 字典中可以包含任意数量的键-值对.
alien_0 = {'color': 'green', 'points': '5'}
new_points = alien_0['points']
print("You just earned " + str(new_points) + " points.")  # 回想下,此处str(new_points)的作用是什么?

输出结果为:You just earned 5 points.

# 2.2添加键-值对

  • # 字典是一种动态结构,可以随时向其中添加键-值对.
  • # 要添加键-值对,可依次指定字典名、用方括号{}括起来的键和相关联的值.
alien_1 = {'color': 'green', 'points': '5'}
print(alien_1)
# 添加键-值对
alien_1['x_position'] = 0
alien_1['y_position'] = 25
print(alien_1)

输出结果为:

{'color': 'green', 'points': '5'}
{'color': 'green', 'points': '5', 'x_position': 0, 'y_position': 25}

# 2.3修改字典中的值

  • # 要修改字典中的值,可依次指定字典名、用方括号括起来的键以及与该键相关联的新值.
    
alien_0 = {'color': 'green'}
print("The alien is " + alien_0['color'] + ".")
# 修改颜色
alien_0['color'] = 'yellow'
print("The alien now is " + alien_0['color'] + ".")

输出结果为:

The alien is green.
The alien now is yellow.

alien_0 = {'x_position': '0', 'y_position': 25, 'speed': 'medium'}
print("The original x-position: " + str(alien_0['x_position']))
# 向右移动alien
# 根据alien当前的速度决定将其移动多远.
if alien_0['speed'] == 'slow':
    x_increment = 1
elif alien_0['speed'] == 'medium':
    x_increment = 2
elif alien_0['speed'] == 'fast':
    x_increment = 3
    
# 新位置等于老位置加上增量
alien_0['x_position'] = alien_0['x_position'] + str(x_increment)
print("New x-position:" + str(alien_0['x_position']))

输出结果为“

The original x-position: 0
New x-position: 02

# 2.4删除键-值对

  • # 对于字典中不再需要的信息,可使用del语句将相应的键-值对彻底删除.
  • # 使用 del语句时,必须指定字典名和要删除的键.
# 对于字典中不再需要的信息,可使用del语句将相应的键-值对彻底删除.
# 使用 del语句时,必须指定字典名和要删除的键.
alien_1 = {'color': 'green', 'points': 5}
print(alien_1)
# 删除points
del alien_1['points']
print(alien_1)

输出结果为:

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

  • # 从输出结果中可以看出,删除的键-值对没有了.  注意:删除的键-值对永远消失了.
# 较长的字典
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'java',
    'selene': 'c#',
}
print("Sarah's favorite language is " + 
      favorite_languages['sarah'].title() + 
      ".")
# 当内容较长时,要在合适的地方拆分内容为多行.

输出结果为:Sarah's favorite language is C.

# 2.5合并字典

  • # 有时候,需要将内容类似的字典合并.
  • # 可使用update()合并字典,将一个字典中的键值对复制到另外一个字典中去.
# 有时候,需要将内容类似的字典合并.
# 可使用update()合并字典,将一个字典中的键值对复制到另外一个字典中去.
programming_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
}
print(programming_languages)
favorite_languages = {
    'phil': 'java',
    'selene': 'c#',
    'jus': 'PHP',
}
print(favorite_languages)
# 使用update()合并字典
programming_languages.update(favorite_languages)
print(programming_languages)

输出结果为:

{'jen': 'python', 'sarah': 'c', 'edward': 'ruby'}
{'phil': 'java', 'selene': 'c#', 'jus': 'PHP'}
{'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phil': 'java', 'selene': 'c#', 'jus': 'PHP'}

# 2.6删除字典中的所有值

  • # 使用clear(),或者给字典变量重新赋值一个空字典({})可以将字典中的所有元素删除.
  • # 使用clear(),删除字典中的所有元素.
# 2.6删除字典中的所有值
# 使用clear(),或者给字典变量重新赋值一个空字典({})可以将字典中的所有元素删除.
favorite_languages = {
    'phil': 'java',
    'selene': 'c#',
    'jus': 'PHP',
}
print(favorite_languages)
# 使用clear()删除字典中的所有元素.
favorite_languages.clear()
print(favorite_languages)

输出结果为:

{'phil': 'java', 'selene': 'c#', 'jus': 'PHP'}
{}

  • # 给字典变量重新赋值一个空字典{},可删除字典中所有的元素.
programming_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
}
print(programming_languages)
# 给字典变量重新赋值一个空字典({})可以将字典中的所有元素删除.
programming_languages = {}
print(programming_languages)

输出结果为:

{'jen': 'python', 'sarah': 'c', 'edward': 'ruby'}
{}

# 3.遍历字典

  • # 字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典所有的键值对、键或值.

# 3.1遍历所有的键值对

# 字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典所有的键值对、键或值.
# 3.1遍历所有的键值对
user_0 = {
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
}
# 用for循环+items()方法遍历字典中的所有键值对
for key, value in user_0.items():
    print("\nkey: " + key)
    print("value: " + value)

输出结果为:
key: username
value: efermi

key: first
value: enrico

key: last
value: fermi

  • # 要编写用于遍历字典的for循环,要声明两个变量,用于存储键值对的键和值.
favorite_languages = {
    'phil': 'java',
    'selene': 'c#',
    'jus': 'PHP',
}
for name, language in favorite_languages.items():
    print(name.title() + "'s favorite language is " + 
          language.title() + ".")

输出结果为:

Phil's favorite language is Java.
Selene's favorite language is C#.
Jus's favorite language is Php.

# 3.2遍历字典中所有的键

  • # 在不需要使用字典中的值,只需要使用字典中的键时,可使用方法keys().
# 3.2遍历字典中所有的键
# 在不需要使用字典中的值,只需要使用字典中的键时,可使用方法keys().
favorite_languages = {
    'phil': 'java',
    'selene': 'c#',
    'jus': 'PHP',
}
for name in favorite_languages.keys():
    print(name.title())

输出结果为:

Phil
Selene
Jus

  • # 遍历字典时,会默认遍历所有的键.但是显示地使用方法keys()让代码更容易理解.
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'java',
    'selene': 'c#',
}
friends = ['phil', 'selene']
for name in favorite_languages.keys():
    print(name.title())
    if name in friends:
        print(" Hi " + name.title() + ", I see your favorite language is " +
              favorite_languages[name].title())

输出结果为:

Phil
 Hi Phil, I see your favorite language is Java
Selene
 Hi Selene, I see your favorite language is C#

  • # 方法keys()并非只能用于遍历;实际上,它返回一个列表,其中包含字典中所有的键.
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'selene': 'c#',
}
person_name = 'erin'
if person_name not in favorite_languages.keys():
    print(person_name.title() + ", please take our poll.")

输出结果为:Erin, please take our poll.

# 3.3使用values()方法遍历字典中所有的值

# 3.3使用values()方法遍历字典中所有的值
# 如果只需要使用字典中的值,而不需要字典中的键,可使用方法values(),它返回一个值列表,而不包含任何键.
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'selene': 'c#',
    'oli': 'python',
}
print("The following languages have been mentioned: ")
for language in favorite_languages.values():
    print(language.title())

输出结果为:

The following languages have been mentioned:
Python
C
Ruby
C#
Python

# 这种方法提取了字典中所有的值,但是没有考虑是否有重复.
# 为剔除重复项,可使用集合(set).集合类似于列表,但每个元素都不允许重复,每个元素都必须是独一无二.

# 集合set()

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'selene': 'c#',
    'oli': 'python',
}
print("The following languages have been mentioned: ")
for language in favorite_languages.values():
    print(language.title())
# 这种方法提取了字典中所有的值,但是没有考虑是否有重复.
# 为剔除重复项,可使用集合(set).集合类似于列表,但每个元素都不允许重复,每个元素都必须是独一无二.
print("The following languages have been mentioned: ")
for language in set(favorite_languages.values()):
    print(language.title())
# 通过对包含重复元素的列表调用set(),可让Python找出列表中独一无二的元素,并使用这些元素来创建一个集合.

输出结果为:

The following languages have been mentioned:
Python
C
Ruby
C#
Python
The following languages have been mentioned:
Python
C#
C
Ruby

  •  # 通过对包含重复元素的列表调用set(),可让Python找出列表中独一无二的元素,并使用这些元素来创建一个集合.

# 3.4使用copy()将字典复制到另外一个新字典中.

# 3.4使用copy()将字典复制到另外一个新字典中.
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'phil': 'java',
    'selene': 'c',
}
print(favorite_languages)
# 使用copy()将字典复制到另外一个新字典中.
original_languages = favorite_languages.copy()
favorite_languages['phil'] = 'python'
print("The new dict: ")
print(favorite_languages)
print("The original dict: ")
print(original_languages)

输出结果为:

{'jen': 'python', 'sarah': 'c', 'phil': 'java', 'selene': 'c'}
The new dict:
{'jen': 'python', 'sarah': 'c', 'phil': 'python', 'selene': 'c'}
The original dict:
{'jen': 'python', 'sarah': 'c', 'phil': 'java', 'selene': 'c'}

# 4嵌套

# 有时候,需要将一系列字典存储在列表中,或将一系列列表存储在字典中,这种称为嵌套.

# 4.1字典列表:将字典存储在列表里.

# 4.1字典列表:将字典存储在列表里.
alien_0 = {'color': 'red', 'points': 15}
alien_1 = {'color': 'green', 'points': 5}
alien_2 = {'color': 'yellow', 'points': 10}

aliens = [alien_0, alien_1, alien_2]

for alien in aliens:
    print(alien)

输出结果为:

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

# 创建一个空列表
aliens = []
# 创建6个绿色alien
for alien in range(6):
    new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
    aliens.append(new_alien)
# 显示前3个alien
for alien in aliens[:3]:
    print(alien)
print("......")

输出结果为:

{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
......

# 创建一个空列表
aliens = []
# 创建6个红色alien
for alien in range(6):
    new_alien = {'color': 'red', 'points': 10, 'speed': 'fast'}
    aliens.append(new_alien)
    print(new_alien)
print("........................")
# 修改中间2个alien为黄色
for alien in aliens[2:4]:  # 切片,与range()函数一样,Python在到达指定的第二个索引前面的元素后停止,即不包含第二个索引元素.
    if alien['color'] == 'red':
        alien['color'] = 'yellow'
        alien['points'] = 5
        alien['speed'] = 'medium'
# 显示前5个alien
for alien in aliens[0:5]:
    print(alien)
print("......")

输出结果为:

{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
........................
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
{'color': 'yellow', 'points': 5, 'speed': 'medium'}
{'color': 'yellow', 'points': 5, 'speed': 'medium'}
{'color': 'red', 'points': 10, 'speed': 'fast'}
........................

# 4.2将列表存储在字典里.

  • # 每当需要在字典中将一个键关联到多个值时,就可以在字典中嵌套一个列表.
# 4.2将列表存储在字典里.
# 每当需要在字典中将一个键关联到多个值时,就可以在字典中嵌套一个列表.
# 存储所点比萨的信息
pizza = {
    'crust': 'thick',
    'toppings': ['mushroom', '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 pizza with the following toppings.
    mushroom
    extra cheese

  • # 注意:列表和字典的嵌套层级不宜太多.如果嵌套层级太多,很可能有更简单的解决问题的方案.

# 4.3在字典中存储字典.

  • # 可以在字典中嵌套字典,但是这样做时,代码可能很快就复杂起来了.
# 4.3在字典中存储字典.
# 可以在字典中嵌套字典,但这样做,代码可能很快就变得复杂起来了.
users = {
    'aeinsten': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton'
    },
    'mcruie': {
        'first': 'marie',
        'last': 'curie',
        'location': 'paris'
    },

}
for username, user_infor in users.items():
    print("\nUsername: " + username)
    full_name = user_infor['first'] + " " + user_infor['last']
    location = user_infor['location']

    print("Full name: " + full_name)
    print("\tLocation: " + location.title())

输出结果为:

Username: aeinsten
Full name: albert einstein
    Location: Princeton

Username: mcruie
Full name: marie curie
    Location: Paris

  • 绳锯木断,水滴石穿。

猜你喜欢

转载自blog.csdn.net/yishuihanq/article/details/106037094
今日推荐