Sha*_*kar 47 python dictionary python-2.7 python-3.x
我正在尝试创建一个python字典,它将用作html文件中的java脚本var以进行可视化.作为一个必要条件,我需要创建一个字典,其中所有名称都在双引号内,而不是Python使用的默认单引号.是否有一种简单而优雅的方式来实现这一目标.
couples = [
['jack', 'ilena'],
['arun', 'maya'],
['hari', 'aradhana'],
['bill', 'samantha']]
pairs = dict(couples)
print pairs
Run Code Online (Sandbox Code Playgroud)
生成输出:
{'arun': 'maya', 'bill': 'samantha', 'jack': 'ilena', 'hari': 'aradhana'}
Run Code Online (Sandbox Code Playgroud)
预期产出:
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
Run Code Online (Sandbox Code Playgroud)
我知道,json.dumps(pairs)做的工作,但字典作为一个整体被转换成一个字符串,这不是我所期待的.
PS:使用json是否有另一种方法可以做到这一点,因为我正在处理嵌套字典.
And*_*ark 55
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"}
Run Code Online (Sandbox Code Playgroud)
ely*_*ase 37
您可以使用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"}
Run Code Online (Sandbox Code Playgroud)
你也可以迭代:
>>> for el in pairs:
print el
arun
bill
jack
hari
Run Code Online (Sandbox Code Playgroud)
Rus*_*ove 10
# 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
Run Code Online (Sandbox Code Playgroud)
产量:
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
Run Code Online (Sandbox Code Playgroud)
这是一个基本print版本:
>>> print '{%s}' % ', '.join(['"%s": "%s"' % (k, v) for k, v in pairs.items()])
{"arun": "maya", "bill": "samantha", "jack": "ilena", "hari": "aradhana"}
Run Code Online (Sandbox Code Playgroud)
问题的前提是错误的:
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.
Run Code Online (Sandbox Code Playgroud)
您应该期待转换为字符串。“print”所做的就是将对象转换为字符串并将其发送到标准输出。
当Python看到:
print somedict
Run Code Online (Sandbox Code Playgroud)
它真正做的事情是:
sys.stdout.write(somedict.__str__())
sys.stdout.write('\n')
Run Code Online (Sandbox Code Playgroud)
如您所见,字典始终会转换为字符串(毕竟字符串是您可以发送到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.
Run Code Online (Sandbox Code Playgroud)
为什么要这么努力避免使用json模块呢?几乎任何解决使用双引号打印嵌套字典问题的解决方案都将重新发明json.dumps()已经做的事情。
| 归档时间: |
|
| 查看次数: |
54545 次 |
| 最近记录: |