TypeError: keys must be str, int, float, bool or None, not tuple,解决 python 中 json 保存不了字典键值为 元组 的问题
>>> a = {('0xFFFA', 11): 32, ('0x00F3', 1): 1, ('0xFFFA', 2): 42}
{('0xFFFA', 1): 32, ('0x00F3', 1): 1, ('0xFFFA', 2): 42}
如上,字典的键值是一个元组,元组的关键键值
是由两个
元素组成的:
(字符串, 数值)
想要把这个字典a
以json
形式保存下来,则会报错:
with open('a_dict.json', 'w') as json_obj:json.dump(a, json_obj)
# TypeError: keys must be str, int, float, bool or None, not tuple
错误的信息为:虽然python允许你的字典键值为元组,但是我json不认同,你的字典键值不可以是元组
,此时应该怎么办呢?
我想到了两个方法:
- 第一个方法是把数据转换为层次型数据,建立两层索引;
- 第二个方法是,
将元组类型转换为字符串来记录信息
。
第二个方法较好实现,且不会改变数据的原有关系。
with open('a_dict.json', 'w') as json_obj:a = json.dumps({str(k): a[k] for k in a})json.dump(a, json_obj)
加了一句话a = json.dumps({str(k): a[k] for k in a})
,表示把a
中的键值全部转换为字符串。
现在的a
就是下面这个样子:
{"('0xFFFA', 1)": 32, "('0x00F3', 1)": 1, "('0xFFFA', 2)": 42}
这衍生出一个新问题,就是读数据a._dict.json
时,读到的数据也是以字符串为索引的
,这就需要我们见招拆招,根据情况,写一个能把字符串转为tuple
元组的函数。
>>> key = "('0xFFFA', 1)"
>>> _str2tuple(key)
('0xFFFA', 1)
下面开始写_str2tuple
:
def _str2tuple(key):# 注意python切片 左开右闭 的性质fore = key[2:8]back = key[11, -1]return tuple(fore, back)
读取数据的只需要按照下面的方式来即可:
with open('a_dict.json','r') as load_obj:a = json.load(load_obj)"""把文件字符串转成字典"""a = json.loads(a)a = {_str2tuple(k): a[k] for k in a}
TypeError: keys must be str, int, float, bool or None, not tuple,解决 python 中 json 保存不了字典键值为 元组 的问题相关推荐
- 一木.溪桥学Python-04: Python基础数据类型int ,float ,bool ,complex,None,str, 转义字符
一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-04: Python基础数据类型int ,float ,bool ,compl ...
- python 错误分析 TypeError: can only concatenate str (not “float“) to str
1. (can only concatenate str (not "float") to str 代码DeBug日志 print("总价为"+money) 1 ...
- 成功解决Python中出现的TypeError: object of type 'zip' has no len()
成功解决Python中出现的TypeError: object of type 'zip' has no len() 不罗嗦,直接解决问题! 目录 解决问题 解决思路 解决方法 解决问题 TypeEr ...
- 解决python中TypeError: not enough arguments for format string
解决python中TypeError: not enough arguments for format string for i in range(1,10): for j in range(1,i ...
- python中json与str转换和出现KeyError的解决方法
python中json与str转换和出现KeyError的解决方法 json转str str转json KeyError的解决方法 json转str json格式的数据其实就是dict类型的数据,如图 ...
- 解决Python中sum函数出现的TypeError: unsupported operand type(s) for +: 'int' and 'list'错误问题
当在Python中运行sum函数时,会出现"TypeError: unsupported operand type(s) for +: 'int' and 'list'"这样的问题 ...
- python中float函数作用_解析要在Python中浮动的字符串(float()函数)
给定一个字符串值(包含浮点值),我们必须在Python中将其转换为浮点值. 要将字符串值转换为float,我们使用float()功能. Python float() 功能 float()functio ...
- TypeError: can only concatenate str (not “float“) to str
处错原因如下 就是print 的地方报错了,类型不一样引起的问题 处理这个问题有2种方法 方法1: 转换类型 pi = 3.14 print("当前的p=" + str(pi)) ...
- 解决Python中字典出现“TypeError: 'dict_keys' object does not support indexing”错误
"TypeError: 'dict_keys' object does not support indexing"错误,是因为python3以后的版本改变了dict.keys的返回 ...
最新文章
- 95 后哈佛小哥撰写《从零开始的机器学习》,入门必备,书籍资源已开放
- cocos2d-x游戏开发系列教程-坦克大战游戏之坦克的显示
- 第五个页面:更多电影页面
- java的常见异常与错误总结
- flex 鼠标放在组件上变手型
- 《我的青春谁做主》我想要的结局
- Java并发编程以及并发须知的几个概念:什么是线程安全?
- 唯一《可解释机器学习》中文书来了:复旦研究生翻译,原作者转发点赞
- php 原子性,PHP下O_APPEND模式的原子性
- linux中对shell变量内容的修改和替换
- 通用印刷体文字识别_印刷体文字识别(汉字)中文符的分割
- 串口通信接口标准(三)——RS232
- 为什么Redis 单线程却能支撑高并发?
- 2021那些值得推荐的社区小程序
- HTML 的js中手机号,身份证号等正则表达式表示
- 【vue2】子组件向父组件传参方法汇总
- Web前端:HTML+CSS+JS实现美女照片3D立方体旋转
- SpringBoot项目中增加favicon.ico图标
- mp3 文件格式介绍
- 速卖通教你如何提升店铺转化率——测评补单