Chapter 6 Python中的字典

Python中的字典

字典是一系列键值对,每个键都与一个值关联,可以使用键来访问与之关联的值。

python 复制代码
# 创建空字典
person = {}
​
# 创建有值字典
person = {'name': 'Jason', 'age': 25}

如果想要访问字典中与键所关联的值可以通过下述方式访问:

python 复制代码
person['name']

通常在代码量较大的程序中会对字典频繁操作,这个时候为了防止后续访问的键在字典中不存在,可以使用字典内置的get()方法,get()方法的第一个参数用于指定需要获取的键,第二个参数用于指定如果需要获取的键不存在返回什么。这样可以避免通过字典名称 + 键名称获取值时,字典中不存在对应键导致程序报错。

报错场景:

python 复制代码
person = {'name': 'Jason', 'age': 25, 'phone': '12345678', 'address': 'New York'}
print(person['id'])

执行结果:

正确写法:

python 复制代码
person = {'name': 'Jason', 'age': 25, 'phone': '12345678', 'address': 'New York'}
print(person.get('id', "Residents have not yet entered the information."))

执行结果:

字典相关操作

  • 添加键值对

    字典是一种动态结构,可以随时向里面添加新的键值对,这里以一个人的个人信息来举例。现在要给这个人添加联系电话和所在城市信息。

    python 复制代码
    person = {'name': 'Jason', 'age': 25}
    print(person)
    ​
    person['phone'] = '12345678'
    person['address'] = 'New York'
    print(person)

    执行结果:

    字典元素的排序顺序会与该元素的添加顺序相同。

  • 修改字典中的值

    可以通过对该键对应的值进行重新赋值。

    python 复制代码
    person = {'name': 'Jason', 'age': 25, 'phone': '12345678', 'address': 'New York'}
    print(f"Jason's current age is {person['age']}")
    ​
    print(f"\nTwo years passed")
    ​
    person['age'] = person['age'] + 2
    print(f"\nJason's current age is {person['age']}")

    执行结果:

  • 删除键值对

    可以使用del语句将字典中的键值对从列表当中彻底删除。

    python 复制代码
    person = {'name': 'Jason', 'age': 25, 'phone': '12345678', 'address': 'New York'}
    print(person)
    ​
    del person['phone']
    print(person)

    执行结果:

  • 遍历字典:

    想要遍历字典中的内容同样可以使用for循环来完成,可以定义两个变量kv一个用来存储键(key),一个用来存储值(value)。接下来不能直接遍历字典变量,需要使用items()方法,转换为字典视图对象,从下述代码执行结果来看,直接访问字典变量,和访问使用items()方法后的变量是完全不同的。

    了解了上述条件可以实现一下遍历:

    python 复制代码
    user_0 = {
        'username': 'efermi',
        'first': 'enrico',
        'last': 'fermi',
    }
    for key, value in user_0.items():
        print(f"\nKey: {key}")
        print(f"Value: {value}")

    执行结果:

    也可以直接遍历访问字典,这个时候返回的结果就无法使用两个变量直接接收返回的键和值,而是返回的键。与使用字典内置的keys()效果相同。

    python 复制代码
    favorite_programing_languages = {
      'jen': 'python',
      'sarah': 'c',
      'edward': 'rust',
      'phil': 'python'
    }
    
    for coder_name in favorite_programing_languages:
      print(f"{coder_name.title()}, I see you love {favorite_programing_languages[coder_name].title()}")
    
    print("\n")
      
    favorite_languages = {
      'jason': 'english',
      'bob': 'chinese',
      'alice': 'french',
    }
    
    for name in favorite_languages:
      print(f"{name.title()}, I see you love {favorite_languages[name].title()}")

    执行结果:

    同时可以使用字典内置的values()方法访问字典中所有的值。直接遍历访问是没有处理值中的重复值可以将获取到的值传入set()方法将其变成一个集合,可以过滤掉重复元素。

    集合与字典定义方式比较相似,当{}中没有键值对取而代之的是不同类型的值,这个时候就是集合,集合里面不会存储重复元素,并且不会以特定顺序存储。

    python 复制代码
    favorite_programing_languages = {
      'jen': 'python',
      'sarah': 'c',
      'edward': 'rust',
      'phil': 'python'
    }
    
    print("The following languages have been mentioned:")
    for language in set(favorite_programing_languages.values()):
      print(language.title())

    执行结果:

嵌套

  • 字典列表

    如果需要做一个字典的集合,这个时候就需要在列表里面嵌套字典结构,接下来用一个例子看一下。

    python 复制代码
    # 创建一个用于存储外星人的空列表
    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(f"Total number of aliens: {len(aliens)}")

    执行结果:

  • 字典中的列表

    如果字典中的某个键需要对应多个值的时候,就需要使用这种嵌套结构。

    python 复制代码
    # 存储客人所点披萨的信息
    pizza = {
        'crust': 'thick',
        'toppings': ['mushrooms', 'extra cheese'],
    }
    
    # 概述顾客点的披萨
    print(f"You ordered a {pizza['crust']}-crust pizza "
          "with the following toppings:")
    
    for topping in pizza['toppings']:
        print(f"\t{topping}")

    执行结果:

  • 字典中的字典:

    也有可能字典中的键所对应的值本身也是一个字典。

    python 复制代码
    # 创建一个用户群字典
    users = {
        'aeinstein': {
            'first': 'albert',
            'last': 'einstein',
            'location': 'princeton',
        },
    
        'mcurie': {
            'first': 'marie',
            'last': 'curie', 
            'location': 'paris',
        },
    }
    
    # 遍历字典中的各个用户及其用户信息
    for username, user_info in users.items():
        print(f"\nUsername: {username}")
        full_name = f"{user_info['first']} {user_info['last']}"
        location = user_info['location']
    
        print(f"\tFull name: {full_name.title()}")
        print(f"\tLocation: {location.title()}")

    执行结果:

相关推荐
zh路西法2 小时前
【宇树机器人强化学习】(七):复杂地形的生成与训练
python·深度学习·机器学习·机器人
python猿2 小时前
打卡Python王者归来--第30天
开发语言·python
2401_831824962 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
2401_879693872 小时前
用Pygame开发你的第一个小游戏
jvm·数据库·python
用户0332126663672 小时前
使用 Python 查找并高亮 Word 文档中的文本
python
xushichao19892 小时前
实战:用OpenCV和Python进行人脸识别
jvm·数据库·python
yy我不解释2 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(三)
开发语言·python·ai作画·音视频·comfyui
冗量3 小时前
langchain的学习路径
python·langchain
love530love3 小时前
不用聊天软件 OpenClaw 手机浏览器远程访问控制:Tailscale 配置、设备配对与常见问题全解
人工智能·windows·python·智能手机·tailscale·openclaw·远程访问控制