如何创建一个Python字典,双引号作为默认的引号格式?

aor9mmx1  于 2022-12-15  发布在  Python
关注(0)|答案(7)|浏览(241)

我正在尝试创建一个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的替代方法,因为我正在处理嵌套字典。

cczfrluj

cczfrluj1#

json.dumps()是您在这里想要的,如果您使用print(json.dumps(pairs)),您将得到您预期的输出:

>>> pairs = {'arun': 'maya', 'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana'}
>>> print(pairs)
{'arun': 'maya', 'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana'}
>>> import json
>>> print(json.dumps(pairs))
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
u5rb5r59

u5rb5r592#

您可以使用json.dumps()构建自己的带有特殊打印的dict版本:

>>> import json
>>> class mydict(dict):
        def __str__(self):
            return json.dumps(self)

>>> couples = [['jack', 'ilena'], 
               ['arun', 'maya'], 
               ['hari', 'aradhana'], 
               ['bill', 'samantha']]    

>>> pairs =  mydict(couples) 
>>> print pairs
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}

您还可以迭代:

>>> for el in pairs:
       print el

arun
bill
jack
hari
rlcwz9us

rlcwz9us3#

# do not use this until you understand it
import json

class doubleQuoteDict(dict):
    def __str__(self):
        return json.dumps(self)

    def __repr__(self):
        return json.dumps(self)

couples = [
           ['jack', 'ilena'], 
           ['arun', 'maya'], 
           ['hari', 'aradhana'], 
           ['bill', 'samantha']]
pairs = doubleQuoteDict(couples)
print pairs

产量:

{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
cx6n0qe3

cx6n0qe34#

下面是print的基本版本:

>>> print '{%s}' % ', '.join(['"%s": "%s"' % (k, v) for k, v in pairs.items()])
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
e0uiprwp

e0uiprwp5#

这个问题的前提是错误的:

I know, json.dumps(pairs) does the job, but the dictionary 
as a whole is converted into a string which isn't what I am expecting.

你应该期待一个字符串的转换。“print”所做的一切就是把一个对象转换成一个字符串,然后把它发送到标准输出。
当Python看到:

print somedict

它真正的作用是:

sys.stdout.write(somedict.__str__())
sys.stdout.write('\n')

正如您所看到的,dict总是被转换为字符串(毕竟字符串是唯一可以发送到文件(如 stdout)的数据类型)。
可以通过为对象定义__str__来控制字符串的转换(正如其他受访者所做的那样),或者调用一个漂亮的打印函数,比如json.dumps(),虽然这两种方法在创建要打印的字符串方面效果相同,但后一种技术有很多优点(你不必创建一个新的对象,它递归地应用于嵌套数据,它是标准的,它是用C语言编写的,为了提高速度,它已经经过了很好的测试)。
后记仍然没有抓住要点:

P.S.: Is there an alternate way to do this with using json, since I am
dealing with nested dictionaries.

为什么要如此努力地避免使用 json 模块呢?几乎任何解决打印带有双引号的嵌套词典问题的方法都将重新发明 json.dumps() 已经做的事情。

vjrehmav

vjrehmav6#

多次困扰我的问题是加载JSON文件时的问题。

import json
with open('json_test.json', 'r') as f:
    data = json.load(f)
    print(type(data), data)
    json_string = json.dumps(data)
    print(json_string)

我不小心把数据传递给了某个需要json字符串的函数,然后我得到了单引号不是有效json的错误。我重新检查了输入json文件,看到了双引号,然后挠了挠脑袋。
问题是数据是一个dict而不是一个字符串,但是当Python为你转换它时,它不是有效的json。

<class 'dict'> {'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana', 'arun': 'maya'}
{"bill": "samantha", "jack": "ilena", "hari": "aradhana", "arun": "maya"}

如果JSON是有效的,并且Dict在转换为字符串之前不需要处理,那么只需像字符串一样加载即可。

with open('json_test.json', 'r') as f:
    json_string = f.read()
    print(json_string)
i34xakig

i34xakig7#

只需两步,轻松搞定

step1:converting your dict to list

step2:iterate your list and convert as json .

为了更好地理解,请查看以下代码段

import json
couples = [
               ['jack', 'ilena'], 
               ['arun', 'maya'], 
               ['hari', 'aradhana'], 
               ['bill', 'samantha']]
pairs = [dict(couples)]#converting your dict to list
print(pairs)

#iterate ur list and convert as json
for x in pairs:
    print("\n after converting: \n\t",json.dumps(x))#json like structure

相关问题