在 Python 中如何快速创建一个只读字典?

开发 后端
不少人喜欢在 Python 项目中,使用字典来存放各种数据。虽然这不是一个好习惯,但是对于少量数据来说,用字典无疑是最简单方便的做法。

不少人喜欢在 Python 项目中,使用字典来存放各种数据。虽然这不是一个好习惯,但是对于少量数据来说,用字典无疑是最简单方便的做法。但前提是,不要一不小心把字典里面的值给覆盖了。

我们知道,当我们向字典添加数据的时候:

  1. a = {'name': 'kingname', 'salary': 99999} 
  2. a['address'] = '上海' 

当我们读取字典的时候,一般写作:

  1. a['address'] 

所以在代码里面,确实存在一不小心把字典覆盖了的情况,例如:

  1. is_rich_man = a['salary'] == 99999 

正常情况下,is_rich_man应该等于 True 或者 False。但如果漏写了一个等号,变成:

  1. is_rich_man = a['salary'] = 99999 

那么,字典里面的数据就会被覆盖。但代码并不会报错,如下图所示:

所以,我们是否有什么办法,实现一个一旦初始化,就不能修改的字典呢?

实际上 Python自带了这个功能,就是types.MappingProxyType。使用它,可以轻易实现一个不能修改的字典:

  1. from types import MappingProxyType 
  2.  
  3. info = {'name': 'kingname', 'salary': 99999} 
  4. safe_info = MappingProxyType(info) 
  5. print('kingname 的月薪是:', safe_info['salary']) 
  6. safe_info['salary'] = 0 

运行效果如下图所示:

MappingProxyType像是挡在字典前面的一面盾牌,从前面是无法修改数据的,但是,如果你确实需要修改数据,那么你可以直接修改原始的字典,此时,修改会反映到 MappingProxyType 处理过的对象上面,如下图所示:

这样,你在处理数据时,进可攻,退可守,让可信任的代码修改数据,防止不信任的代码修改数据,一举两得。

 

责任编辑:赵宁宁 来源: 未闻Code
相关推荐

2023-03-15 09:00:43

SwiftUISlider

2015-08-06 13:44:21

swiftcocoapods

2020-10-14 06:18:20

Golang字符串数组

2017-02-10 20:00:17

Linux共享目录命令

2011-03-10 10:45:47

Azure“Hello Worl

2021-08-10 07:27:42

Elasticsear集群开源

2018-06-19 16:04:27

Dubbo应用Java

2021-01-04 09:12:31

集合变量

2009-09-22 11:54:42

ibmdwPHP

2014-05-26 09:13:46

DockerPython

2022-01-05 12:09:16

异步队列集群

2021-05-27 09:50:03

连接池FTP服务器

2023-04-04 09:15:10

NAPI 框架鸿蒙

2010-03-15 17:26:58

Python字典

2010-08-05 15:46:13

Flex行为Flex效果

2013-05-02 10:40:24

xcode

2024-05-06 00:00:00

Android系统通信

2023-02-13 14:47:32

人工智能机器学习ChatGPT

2021-11-15 10:35:46

Python线程代码

2017-10-10 14:41:38

Linux
点赞
收藏

51CTO技术栈公众号