Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python json.dump使用字典失败_Python - Fatal编程技术网

Python json.dump使用字典失败

Python json.dump使用字典失败,python,Python,我正在尝试用json符号为文件编写Python字典。我就是这样尝试的: def write_to_json(self, data): with open('dict.json', 'w') as file: json.dump(data, file) 但是,对于我的字典,dump方法失败。它说: TypeError: key 23 is not a string 这(确实)是正确的,它应该是整数,但是因为数据最初是从csv文件读取的,并且被操纵,所以我无法保证,所以我需要转换它们

我正在尝试用json符号为文件编写Python字典。我就是这样尝试的:

def write_to_json(self, data):
  with open('dict.json', 'w') as file:
    json.dump(data, file)
但是,对于我的字典,
dump
方法失败。它说:

TypeError: key 23 is not a string
这(确实)是正确的,它应该是
整数
,但是因为数据最初是从csv文件读取的,并且被操纵,所以我无法保证,所以我需要转换它们

如何将dicitonary中的每个项(键和值)转换为字符串

下面是字典的示例(其基本上是键->列表):

或者,甚至不将其保存到中间变量:

json.dump( { str(k):v for k,v in data.items() }, file )
这只转换键(这是JSON真正需要的——JSON值也可以是整数或其他东西)

如果您需要转换所有数据,最好在从输入数据构建字典之前进行转换,但如果这不是一个选项,那么应该可以这样做(仅当数据与您显示的数据完全一致时,请注意,也可以制作一个转换器,该转换器将在嵌套结构中查找任何整数并将其转换为字符串,但要复杂一些):

(假设字典中的每个值都是整数或字符串数组)

结果
这应该满足您在Python2中的需求

json.dump({str(k): map(str, v) for k, v in data.iteritems()}, file)
和python 3

json.dump({str(k): list(map(str, v)) for k, v in data.items()}, file)
请注意,检查这一点的一个简单方法是使用
json.dumps
方法作为测试示例

In [489]: data = {1: [5,6,8,6], 2: [7,8,9]}

In [490]: json.dumps({str(k): map(str, v) for k, v in data.iteritems()})
Out[490]: '{"1": ["5", "6", "8", "6"], "2": ["7", "8", "9"]}'

相关?@AlexanderMcFarlane可能没有。这里的问题似乎是键是非字符串(JSON只接受字符串作为键)@Alexander McFarlane是的,但是我不知道哪种类型是“传入的”。但是我会记住这个numpy问题,谢谢!这个问题说明值也需要是字符串。我添加了Python 3 VariantHanks,我将尝试以下方法:)@MoonsikPark有Python 2和Python 3变体。。。检查与python版本对应的类型
{str(k): [str(x) for x in v] for k, v in array.items()}
>>> {str(k) : [str(x) for x in v] for k, v in a.items()}
{'1': ['1', '2', '3'], '2': ['1', '2']}
json.dump({str(k): map(str, v) for k, v in data.iteritems()}, file)
json.dump({str(k): list(map(str, v)) for k, v in data.items()}, file)
In [489]: data = {1: [5,6,8,6], 2: [7,8,9]}

In [490]: json.dumps({str(k): map(str, v) for k, v in data.iteritems()})
Out[490]: '{"1": ["5", "6", "8", "6"], "2": ["7", "8", "9"]}'