Python里的dict和set的背后小秘密

当我们在Python中使用dict(字典)和set(集合)这两种数据结构时,它们的背后其实有许多小秘密。在本文中,我们将简要地介绍这些秘密。

Python字典(dict)的小秘密

接受任意类型作为键名

Python的字典是一种哈希表,允许使用任意可哈希(hashable)的数据类型作为键名。哈希表使用键名的哈希值来快速定位键值对,因此键名必须是不可变的(immutable)。常见的可哈希类型包括整数、字符串、元组。

不过,Python的字典却非常灵活,甚至可以使用自定义的类作为键名。如果自定义类没有实现哈希值和相等性比较,那么Python会自动为其生成哈希值,并根据对象的id来比较它们是否相等。下面是一个简单的示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

d = {Person('Alice', 25): 'Alice is 25 years old.'}

print(d[Person('Alice', 25)])

在这个例子里,我们使用自定义的Person类作为字典的键名,不过我们并没有为其实现哈希值和相等性比较。不过,由于Person类的每个实例都有唯一的id,因此在字典中它们会被视作不同的键名。

插入顺序是有利于查询的

在Python字典中,键值对的插入顺序会被保留。这个特性是从Python 3.7版本开始引入的,它意味着字典中的键值对可以按照插入顺序依次进行访问。比如说,我们可以使用collections.OrderedDict类来创建一个带有插入顺序的字典,下面是一个简单的示例:

from collections import OrderedDict

d = OrderedDict()

d['a'] = 1
d['b'] = 2
d['c'] = 3
d['d'] = 4

print(d.keys())  # odict_keys(['a', 'b', 'c', 'd'])

在这个例子里,我们首先创建了一个空的OrderedDict实例,然后依次插入了四个键值对。最后,我们使用keys()方法来查看所有键名,发现它们的顺序正是我们插入时的顺序。

Python集合(set)的小秘密

可以用于列表去重

在Python中,我们可以使用集合来快速的对一个列表进行去重。集合可以保证其中的每个元素都是唯一的,因此我们只需要将列表转换为集合,然后再将其转换回列表即可。下面是一个简单的示例:

lst = [1, 2, 3, 1, 2, 3, 4, 5]

lst = list(set(lst))

print(lst)  # [1, 2, 3, 4, 5]

在这个例子里,我们首先定义了一个包含重复元素的列表lst,然后使用set()函数将其转换为集合,并使用list()函数将其转换回列表。最终,我们得到了一个没有重复元素的列表。

可以进行基本的集合操作

Python的集合不仅可以用来进行去重,还能进行一些基本的集合操作,例如并集、交集、差集等。这些操作都可以通过集合对象的方法来实现,下面是一些示例:

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}

# 并集
print(s1.union(s2))  # {1, 2, 3, 4, 5, 6}

# 交集
print(s1.intersection(s2))  # {3, 4}

# 差集
print(s1.difference(s2))  # {1, 2}

# 对称差集
print(s1.symmetric_difference(s2))  # {1, 2, 5, 6}

在这个例子里,我们定义了两个集合s1s2,并对其进行了一些基本的集合操作。可以看到,这些操作通过集合对象的方法比较容易实现,而且非常高效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python里的dict和set的背后小秘密 - Python技术站

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

相关文章

  • Python命令行库click的具体使用

    Python命令行库click是一个优秀的命令行框架,它能够帮助开发者快速地构建命令行界面,从而方便用户直接在终端中使用程序。在本篇攻略中,我们将介绍click的具体使用方法,包括安装、基本语法、参数选项等。 安装click 在使用click之前,需要先安装click库。你可以使用pip来安装click,方法如下: pip install click 使用c…

    python 2023年6月3日
    00
  • 如何使用Python执行SQL语句?

    以下是如何使用Python执行SQL语句的完整使用攻略,包括导入模块、连接数据库、执行查询操作等步骤。同时,提供两个示例以便更好理解如何使用Python执行SQL语句。 步骤1:导入模块 在Python中,我们需要导入相应的模块来执行SQL语句。以下是导入pymysql模块的基本语法: import pymysql 步骤2:连接数据库 在Python中,我们…

    python 2023年5月12日
    00
  • 用python写一个windows下的定时关机脚本(推荐)

    当我们需要让电脑在一定时间后自动关机时,可以用python编写定时关机脚本。以下是实现的完整攻略: 步骤1:编写脚本 打开任意文本编辑器,新建一个空白文件,将以下代码复制进去: import os import time shutDownTime = int(input("请输入多少分钟后自动关机:")) os.system("…

    python 2023年5月23日
    00
  • python实现数组求和与平均值

    当我们需要对数组中的数进行求和和求平均值时,可以使用Python的内置方法和库函数来实现。下面是实现数组求和和平均值的完整攻略。 数组求和 数组元素求和的方法可以使用Python内置的sum()函数实现。以下是使用sum()函数来对数组进行求和的方法: array = [1, 2, 3, 4, 5] sum_array = sum(array) print(…

    python 2023年6月5日
    00
  • python如何给字典的键对应的值为字典项的字典赋值

    要给字典中键对应的值为字典项的字典赋值,需要分两步进行操作: 创建内部字典 首先需要创建一个空字典,作为内部元素,例如以下代码: dict_item = {} 给外部字典添加/更新键值对 接下来,可以通过给外部字典键对应的值赋值为内部字典来添加或者更新该键值对应的内部字典,例如: dict_outer = {} dict_outer[‘key’] = dic…

    python 2023年5月13日
    00
  • Python数据处理的六种方式总结

    以下是“Python数据处理的六种方式总结”的完整攻略。 1. Python数据处理的六种方式 Python是一种非常强的数据处理语言,它提供了多种方式来处理数据以下是Python数据处理的六种方式: 1.1表推导式 列表推导式是一种简洁的方式,可以快速地一个列表。它的语法如下: [expression for in iterable if conditio…

    python 2023年5月13日
    00
  • python持久化存储文件操作方法

    下面是关于Python持久化存储文件操作方法的完整攻略: 1. 什么是Python持久化存储? Python持久化存储是指将Python程序中的数据(如变量、对象、数据结构等)保存到本地磁盘或其它外部存储设备,以便下次程序运行时能够重新读取这些数据。这可以方便用户保存或共享程序中的数据,也可以加快程序运行速度。 在Python中,常用的持久化存储方法包括:文…

    python 2023年6月2日
    00
  • Python容器类型转换的3种方法实例

    Python 中有很多种容器类型,例如列表(list)、元组(tuple)、字典(dict)等。有时候我们需要将一种容器类型转换成另一种容器类型。为了帮助大家更好地理解 Python 容器类型的转换,本文将为大家介绍 3 种常见的容器类型转换方法。 1. 字符串转列表 如果我们要将一个以空格分隔的字符串转换为一个列表,可以使用字符串的 split() 方法和…

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