百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python 中字典的鲜为人知的用法

itomcoil 2025-03-06 16:08 9 浏览

1. 添加列表作为字典的键

_dict = {}
_list = [1, 2, 3]
_dict[_list] = 'Added'


Output - 
      _dict[_list] = 'Added'
  TypeError: unhashable type: 'list'

事实是,如果添加一个列表作为字典的键,上面的代码会引发错误。原因是每当我们添加一个对象作为字典的键时,Python 都会调用该对象类的 __hash__ 函数。

与 int、str、tuple 等不同,list 类中没有 __hash__ 方法的实现。

所以,现在如果尝试扩展列表类并在其中添加此方法,就添加一个列表作为字典的键。

class ClassList(list):
    def __hash__(self):
        return 0

_dict = {}
_list = ClassList([1, 2, 3])
_dict[_list] = 'Added'
print(_dict)


Output -
  {[1, 2, 3]: 'Added'}

不过不建议使用上述解决方法,因为这会使列表可哈希,从而导致代码中出现意外行为。

2. 使用字典作为 if条件的替代方法

字典的用途就是维护键值对。但字典还有另一个特殊的用例——将它们用作 if条件。

例如,请看下面的代码。在这里,对应于输入值,调用一个特定的函数。

num = 1

if num == 1:
    funcA()
elif num == 5:
    funcB()
else:
    func()

使用字典 -

num = 1

func_mapping = {1: funcA,
                2: funcB}
func_mapping.get(num, func)()  # func is default function

所以有了字典,可以通过给它提供键来直接检索到对应的函数。

3. 字典作为 switch 语句

可以使用字典模拟 switch 语句,以获得更简洁、更易读的代码。

def switch_case(case):
    return {
        'case1': 'This is case 1',
        'case2': 'This is case 2',
        'default': 'This is the default case'
    }.get(case, 'Invalid case')

result = switch_case('case1')

输出层 —This is case 1

4. __missing__值

从 2.5 开始,dicts 有一个特殊的方法__missing__,用于调用缺失的值:

class MyDict(dict):
    def __missing__(self, key):
        self[key] = rv = []
        return rv

m = MyDict()
m["foo"].append(1)
m["foo"].append(2)

print(dict(m))  # {'foo': [1, 2]}
print(m["x"])   # []

集合中还有一个 dict 子类,它的作用几乎相同,但调用一个函数,而不为不存在的项目提供参数:Defaultdict

from collections import defaultdict

m = defaultdict(list)
m["foo"].append(1)
m["foo"].append(2)

print(dict(m))  # {'foo': [1, 2]}

当要提供缺省值或在找不到键时执行特定操作,而不是引发 .KeyError

5. 哈希等效密钥

这里有一个有趣的字典例子——

my_dict = {'1': 'string', True: 'bool', 1: 'int', 1.0: float}
print(my_dict)

# o/p: {'1': 'string', True: }

尽管向 Python 字典添加了 4 个不同的键,但能说出为什么它只保留其中的两个键吗,这是因为 — 在 Python 中,字典根据哈希的等价性(使用 hash()计算)而不是身份(使用id() 计算)来查找键。

在这种情况下,毫无疑问11.0、 和 True本身具有不同的数据类型,也是不同的对象。

print(id(1), id(True), id(1.0))
print(type(1), type(True), type(1.0))

# o/p: 
# 140407572928816 4308871808 140407573652336
#   

但是,事实是它们共享相同的哈希值,字典将它们视为相同的键。

print(hash(1), hash(True), hash(1.0))

# o/p: 1 1 1

而且有没有看到对应于 True 的值是 bool,但它打印的是浮点数。

o/p: {'1': 'string', True: }

这是因为,首先,它被添加为键True,其值为 'bool'。接下来,在添加键时,python 将其识别为哈希值的等价值1

因此,对应的值被 True覆盖,而键 'int'保持原样。True

最后,在添加1.0 时,会遇到另一个哈希等价关系True,现有键为True 。同样,在上一步中更新到的对应于'int' 的值被 'float'覆盖。

相关推荐

python unittest 基本用法(python pytest)

unittest的使用分为6个步骤:1.导入unittest模块2.定义测试类,父类为unittest.TestCase可继承unittest.TestCase的方法,如setUp和tearDown方...

python中如何利用递归原理找出文件夹中的全部文件

在python中要想查看文件夹中的文件,需要先导入os模块,在python中导入os模块后,定义一个空的列表,用来接收返回的文件,importoslist1=[]接下来,我们定义一个函数,这个函...

Python读取配置文件(config.ini),写入配置文件

一、读取配置文件我的目录如下,在config下有一个config.ini配置文件配置文件内容#定义config分组[config]platformName=AndroidappPackage...

python 文件操作(python文件操作添加下一行)

在Python中,可以使用内置的文件操作函数和方法来进行文件的读取、写入和操作。下面是一些常见的文件操作方法:打开文件:使用open()函数来打开一个文件,并返回一个文件对象。你需要指定文件的路径和打...

失业程序员复习python笔记——excel读写处理

Excel是我们在工作中用到的最频繁的软件之一,它有着强大的计算能力和便捷的图表功能。今天记录一下怎么用python操作excel文件安装excel扩展库如果要用Python操作Excel文...

Python的文件处理(python文件处理方法)

一、文件处理的流程1.打开文件,得到文件句柄并赋值给一个变量2.通过句柄对文件进行操作3.关闭文件示例:d=open('abc')data1=d.read()pri...

Python读写docx文件(python如何读写文件)

Python读写docx文件Python读写word文档有现成的库可以处理pipinstallpython-docx安装一下。https://python-docx.readthedocs.io/...

(简单入门易懂)实例详解:Python csv文件的读写操作

今天为大家带来的内容是:简单入门易懂的是咧详解:Pythoncsv文件的读写操作本文内容主要介绍了Pythoncsv文件的读写操作实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...

Python3查看文件是否存在,以及读、写与执行的属性

目录技术背景代码实现测试分析总结概要版权声明技术背景在使用python对系统文件进行操作的项目中,经常需要用到对本地文件的存在和读写进行判断的操作。最常用的比如os.exists函数,可以很方便的判断...

Python常用文件操作库使用详解(python中文件操作的例子)

Python生态系统提供了丰富的文件操作库,可以处理各种复杂的文件操作需求。本教程将介绍Python中最常用的文件操作库及其实际应用。一、标准库核心模块1.1os模块-操作系统接口主要功能:文件...

python入门 输入与输出——读和写文件

以下是Python文件读写的入门指南,包含基础操作、安全写法及实用技巧:一、文件操作基础步骤打开文件→读写操作→关闭文件(务必确保最后关闭文件,避免资源泄露)二、文件读取1.基本读取#方法...

第41讲 基本文件操作(和猫妹学Python)

小朋友们好,大朋友们好!我们今天基本文件操作,要学习的内容如下:什么是文件,什么是目录创建和打开文件关闭文件with语句打开文件写入文件内容读取文件什么是文件,什么是目录文件是计算机存储信息的一种形式...

Python自动化办公自学笔记(八)文件操作

一、文件使用在Python里面,文件分为两种类型,一种是文本文件,后缀名为“.txt”,由单一特定编码的字符组成;另一种是二进制文件,由比特0和比特1组成。Python对以上两种文件都有统一的操作步骤...

python 利用python读取DOC文件(python读取word数据)

近期公司需要处理一批DOC文件,而在windows系统中,python没有模块能直接读取doc文件。需要先把doc文件批量转成docx文件,再读取操作。linux系统python有模块可直接读取doc...

Python学不会来打我(83)python读写文件操作总结

python读写文件操作其实是一个很复杂的过程,在python代码中给的内建函数open()、read()、write()等操作起来非常简单,但是这些方法的底层却是很复杂的,这里面涉及到一些操作系统的...