python基础知识之字典(Dict)

Python中的字典(Dict)是一种非常重要的数据类型,它可以用来存储键值对,并且可以快速地通过键来获取对应的值。本文将详细讲解Python中字典的基础知识,包括字典的创建、操作、遍历、方法等内容。下面让我们逐步展开。

字典的创建

字典的创建可以使用大括号{}或者dict()函数,如下所示:

# 使用大括号创建字典
person = {'name':'张三', 'age':20, 'gender':'男'}

# 使用dict()函数创建字典
person = dict(name='张三', age=20, gender='男')

键值对之间使用逗号分隔,其中键和值之间使用冒号“:”进行关联。

字典的操作

访问字典中的值可以使用中括号[]操作符,如下所示:

person = {'name':'张三', 'age':20, 'gender':'男'}
print(person['name'])    # 输出:张三
print(person['age'])     # 输出:20

如果访问的键不存在,会抛出KeyError异常,程序会中断执行。可以使用get()方法来避免这种情况,如下所示:

person = {'name':'张三', 'age':20, 'gender':'男'}
print(person.get('name'))        # 输出:张三
print(person.get('address'))     # 输出:None
print(person.get('address', '')) # 输出:''

这样,如果键不存在就会返回None,而不会抛出异常。也可以在get()方法中传入第二个参数,如果键不存在就返回该参数。

对于字典中的值,可以使用相应的键来修改或者添加,如下所示:

person = {'name':'张三', 'age':20, 'gender':'男'}
person['age'] = 21   # 修改字典中的值
person['address'] = '北京市'   # 添加新的键值对
print(person)   # 输出:{'name': '张三', 'age': 21, 'gender': '男', 'address': '北京市'}

同样,如果要删除字典中的键值对,可以使用del关键字,如下所示:

person = {'name':'张三', 'age':20, 'gender':'男'}
del person['age']   # 删除字典中的键age及其对应的值
print(person)   # 输出:{'name': '张三', 'gender': '男'}

字典的遍历

可以使用for循环遍历字典的键或者值或者键值对,如下所示:

# 遍历键
person = {'name':'张三', 'age':20, 'gender':'男'}
for key in person:
    print(key)

# 遍历值
person = {'name':'张三', 'age':20, 'gender':'男'}
for value in person.values():
    print(value)

# 遍历键值对
person = {'name':'张三', 'age':20, 'gender':'男'}
for key, value in person.items():
    print(key, value)

字典的方法

Python中的字典还提供了一些实用的方法,可以方便地操作字典。常用的方法如下:

len()

返回字典中键值对的数量:

person = {'name':'张三', 'age':20, 'gender':'男'}
print(len(person))  # 输出:3

keys()

返回字典中所有键的列表:

person = {'name':'张三', 'age':20, 'gender':'男'}
print(person.keys())    # 输出:dict_keys(['name', 'age', 'gender'])

values()

返回字典中所有值的列表:

person = {'name':'张三', 'age':20, 'gender':'男'}
print(person.values())  # 输出:dict_values(['张三', 20, '男'])

items()

返回字典中所有键值对的列表:

person = {'name':'张三', 'age':20, 'gender':'男'}
print(person.items())   # 输出:dict_items([('name', '张三'), ('age', 20), ('gender', '男')])

update()

将一个字典中的键值对更新到另一个字典中:

# 将person2中的键值对更新到person1中
person1 = {'name':'张三', 'age':20}
person2 = {'gender':'男', 'height':175}
person1.update(person2)
print(person1)  # 输出:{'name': '张三', 'age': 20, 'gender': '男', 'height': 175}

clear()

清空字典中的所有键值对:

person = {'name':'张三', 'age':20, 'gender':'男'}
person.clear()
print(person)   # 输出:{}

示例说明

下面给出两个操作字典的示例,分别是使用字典统计字符串中每个字符出现的次数和将一个嵌套字典进行拍平。

统计字符串中每个字符出现的次数

使用字典可以很容易地统计字符串中每个字符出现的次数,如下所示:

text = 'hello, world!'
count = {}
for c in text:
    if c in count:
        count[c] += 1
    else:
        count[c] = 1

print(count)
# 输出:{'h': 1, 'e': 1, 'l': 3, 'o': 2, ',': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1, '!': 1}

先定义一个空的字典count,然后遍历字符串text中的每个字符,如果字符已经存在于count中,就将对应的值加1,否则将该字符添加到count中,并将对应的值设为1。

将一个嵌套字典进行拍平

有时候我们需要将一个嵌套字典进行“拍平”,即将所有的键值对都放到一个字典中,如下所示:

person = {'name':'张三', 'age':20, 'gender':{'name':'男', 'code':1}}
flatten = {}

def flatten_dict(dic, key=None):
    if not isinstance(dic, dict):
        flatten[key] = dic
        return

    for k, v in dic.items():
        new_key = k if key is None else key + '.' + k
        flatten_dict(v, new_key)

flatten_dict(person)
print(flatten)
# 输出:{'name': '张三', 'age': 20, 'gender.name': '男', 'gender.code': 1}

使用递归方式遍历person中的所有键值对,如果值是一个字典,就递归调用flatten_dict()方法,将当前的键作为新的key参数传入。如果值不是一个字典,就将当前的键值对添加到flatten中,如果当前键已经存在,就会加上新的前缀,如gender.name。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python基础知识之字典(Dict) - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 使用Python写一个小游戏

    确定游戏类型和规则 在开始开发任何游戏之前,你需要确切地思考游戏玩法规则。需要找出游戏的核心机制、目标和规则。比如,我们要开发一个文字冒险游戏,需要设定故事剧情并为每个场景和任务设定清晰的目标和规则。 选择适合游戏类型的Python库 Python拥有许多强大的库,用于游戏开发。其中最为出名的是pygame。选择合适的库可以轻松地实现游戏中需要的动画和音效。…

    python 2023年5月19日
    00
  • Python学习笔记基本数据结构之序列类型list tuple range用法分析

    Python学习笔记基本数据结构之序列类型list、tuple、range用法分析 Python中的序列类型包括list、tuple和range。这些数据结构都是有序,可以索引访问其中的元素。本文将对这三种序列类型的用法详细分析。 list list是Python最常用的序列类型之一,它可以存储任意类型的数据,包括数字、字符串、列表等。下面是一些常用的lis…

    python 2023年5月13日
    00
  • Redis 如何实现分布式锁的高可用性?

    当多个客户端同时访问 Redis 数据库时,为了保证数据的一致性和可靠性,需要使用分布式锁来控制对数据的访问。Redis 是一款高性能的内存数据库,支持多种数据结构和丰富的功能,其中分布式锁是 Redis 的重要应用场景之一。Redis 如何实现分布式锁的高可用性?本文将为您详细讲解 Redis 分布式锁的实现原理和使用攻略。 Redis 分布式锁的实现原理…

    python 2023年5月12日
    00
  • Python中的enum的使用方法

    接下来我将为您详细讲解 Python 中的 enum 的使用方法。 1. 什么是 enum 在 Python 中,enum 是一个枚举类型,它提供了创建枚举类的方法。枚举类的实例是唯一的,可以通过名字或值进行访问。 2. enum 的用法示例 示例1:创建简单枚举类 可以通过 Enum 类来创建一个枚举类,如下所示: from enum import Enu…

    python 2023年6月3日
    00
  • 用NumPy 模块对bin进行nums计算的直方图

    首先,要使用NumPy模块对数据进行处理,需要首先安装NumPy。可以在命令行中输入以下命令安装NumPy: pip install numpy 安装完成后,我们可以开始处理数据,计算直方图。 1. 引入NumPy模块 在Python代码中,我们需要先引入NumPy模块。 import numpy as np 2. 准备数据 我们先准备一个包含了一组数据的列…

    python-answer 2023年3月25日
    00
  • 利用Python操作excel表格的完美指南

    针对您提出的问题,我将为您提供一个完整的实例教程,讲解如何使用Python操作Excel表格的过程,教程中包含两个示例说明。 1. 准备工作 在开始之前,需要先安装openpyxl和xlrd两个库,这两个库都可以用来处理Excel文件。其中openpyxl适用于.xlsx类型的文件,而xlrd适用于.xls类型的文件。 pip install openpyx…

    python 2023年5月13日
    00
  • Python:是否可以在不更改实际当前目录的情况下更改 Windows 命令行 shell 当前目录?

    【问题标题】:Python: Is it possible to change the Windows command line shell current directory without changing the actual current directory?Python:是否可以在不更改实际当前目录的情况下更改 Windows 命令行 shell…

    Python开发 2023年4月8日
    00
  • python tkinter中的锚点(anchor)问题及处理

    Python tkinter是一个基于Tk GUI工具包的Python图形用户界面(GUI)的标准Python接口。在tkinter中,锚点(anchor)可以指定控件在所在父容器中的位置。这个问题在GUI界面的开发中非常常见,不同的设计方式需要控件在界面中位置的不同。 以下是python tkinter中锚点问题及处理的完整攻略: 锚点的常见取值 在tki…

    python 2023年6月13日
    00
合作推广
合作推广
分享本页
返回顶部