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循环来完成,可以定义两个变量k、v一个用来存储键(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()}")

    执行结果:

相关推荐
用户0332126663673 分钟前
如何快速拆分超大 Excel 文件【Python 教程】
python·excel
kimnoic8 分钟前
Python中使用封装类还是函数以及它们的区别
开发语言·python
青柠之夏cc13 分钟前
Python Java PHP底层对比:内存并发性能全解析
开发语言·python·线程
TomEval14 分钟前
【测AI】第10篇:AI 模型功能测试实战 —— 测试用例怎么设计?
人工智能·python·功能测试·测试用例
半亩码田19 分钟前
C#转Python第5.1篇:异步编程:asyncio vs async/await,语法相似但机制不同
开发语言·python·c#
yi01122 分钟前
DAY27: LeetCode 110. 平衡二叉树 | 在递归中判断是否平衡
人工智能·笔记·python·算法·leetcode·二叉树·递归
言乐61 小时前
PythonLOLM自动生成复盘报告模型
开发语言·前端·数据库·人工智能·python
水水不水啊1 小时前
告别切换N个窗口调试:我用 Python + WebView 做了款现代化串口助手(含 TCP/UDP、波形、协议解析)
python·tcp/ip·udp
论文复现现场1 小时前
DeepSeek V4.1 Flash 各平台价格怎么比?缓存、峰谷计费与 Python 成本计算
开发语言·python·缓存·大模型·成本优化·deepseek
打工仔折腾 AI1 小时前
鸿蒙平板远控电脑实测:ToDesk蓝牙键鼠、双模式鼠标与跨端剪贴板落地记录
人工智能·后端·python·性能优化·计算机外设·电脑·harmonyos