我正在尝试创建一个python字典,它将被用作html文件中的java脚本变量,用于可视化目的。作为一个必要条件,我需要创建一个字典,所有名称都在双引号内,而不是Python使用的默认单引号。有没有一种简单而优雅的方法可以实现这一点?
couples = [
['jack', 'ilena'],
['arun', 'maya'],
['hari', 'aradhana'],
['bill', 'samantha']]
pairs = dict(couples)
print pairs
生成的输出:
{'arun': 'maya', 'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana'}
预期产出:
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
我知道,json.dumps(pairs)
可以完成这项工作,但是字典作为一个整体被转换成了一个字符串,这不是我所期望的。
**P.S.:**有没有使用json的替代方法,因为我正在处理嵌套字典。
7条答案
按热度按时间cczfrluj1#
json.dumps()
是您在这里想要的,如果您使用print(json.dumps(pairs))
,您将得到您预期的输出:u5rb5r592#
您可以使用
json.dumps()
构建自己的带有特殊打印的dict版本:您还可以迭代:
rlcwz9us3#
产量:
cx6n0qe34#
下面是
print
的基本版本:e0uiprwp5#
这个问题的前提是错误的:
你应该期待一个字符串的转换。“print”所做的一切就是把一个对象转换成一个字符串,然后把它发送到标准输出。
当Python看到:
它真正的作用是:
正如您所看到的,dict总是被转换为字符串(毕竟字符串是唯一可以发送到文件(如 stdout)的数据类型)。
可以通过为对象定义__str__来控制字符串的转换(正如其他受访者所做的那样),或者调用一个漂亮的打印函数,比如
json.dumps()
,虽然这两种方法在创建要打印的字符串方面效果相同,但后一种技术有很多优点(你不必创建一个新的对象,它递归地应用于嵌套数据,它是标准的,它是用C语言编写的,为了提高速度,它已经经过了很好的测试)。后记仍然没有抓住要点:
为什么要如此努力地避免使用 json 模块呢?几乎任何解决打印带有双引号的嵌套词典问题的方法都将重新发明 json.dumps() 已经做的事情。
vjrehmav6#
多次困扰我的问题是加载JSON文件时的问题。
我不小心把数据传递给了某个需要json字符串的函数,然后我得到了单引号不是有效json的错误。我重新检查了输入json文件,看到了双引号,然后挠了挠脑袋。
问题是数据是一个dict而不是一个字符串,但是当Python为你转换它时,它不是有效的json。
如果JSON是有效的,并且Dict在转换为字符串之前不需要处理,那么只需像字符串一样加载即可。
i34xakig7#
只需两步,轻松搞定
为了更好地理解,请查看以下代码段