我有一个JSON文件是一个混乱,我想漂亮 - 在python中最简单的方法是什么?我知道PrettyPrint有一个"对象",我认为它可以是一个文件,但我不知道如何传入文件 - 只是使用文件名不起作用.
我正试图获得一本字典的印刷品,但我没有运气:
>>> import pprint
>>> a = {'first': 123, 'second': 456, 'third': {1:1, 2:2}}
>>> pprint.pprint(a)
{'first': 123, 'second': 456, 'third': {1: 1, 2: 2}}
Run Code Online (Sandbox Code Playgroud)
我希望输出在多行上,如下所示:
{'first': 123,
'second': 456,
'third': {1: 1,
2: 2}
}
Run Code Online (Sandbox Code Playgroud)
可以pprint这样吗?如果没有,那么哪个模块呢?我正在使用Python 2.7.3.
我刚刚开始学习python,我正在构建一个文本游戏.我想要一个库存系统,但我似乎无法打印出字典而不看起来很难看.这是我到目前为止:
def inventory():
for numberofitems in len(inventory_content.keys()):
inventory_things = list(inventory_content.keys())
inventory_amounts = list(inventory_content.values())
print(inventory_things[numberofitems])
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有以下函数,它将XML文件解析为字典.
不幸的是,由于Python字典没有排序,我无法按照我的意愿循环遍历节点.
如何更改此值以便输出一个有序字典,该字典反映了使用'for'循环时节点的原始顺序.
def simplexml_load_file(file):
import collections
from lxml import etree
tree = etree.parse(file)
root = tree.getroot()
def xml_to_item(el):
item = None
if el.text:
item = el.text
child_dicts = collections.defaultdict(list)
for child in el.getchildren():
child_dicts[child.tag].append(xml_to_item(child))
return dict(child_dicts) or item
def xml_to_dict(el):
return {el.tag: xml_to_item(el)}
return xml_to_dict(root)
x = simplexml_load_file('routines/test.xml')
print x
for y in x['root']:
print y
Run Code Online (Sandbox Code Playgroud)
输出:
{'root': {
'a': ['1'],
'aa': [{'b': [{'c': ['2']}, '2']}],
'aaaa': [{'bb': ['4']}],
'aaa': ['3'],
'aaaaa': ['5']
}}
a
aa
aaaa
aaa
aaaaa …Run Code Online (Sandbox Code Playgroud) 我有"集1",这就像"名","地点","动物","事"和"集2"具有相同的细节从输出的详细列表.
我想dict_names[setx]['name']...在这些行上创建一个字典等.
这是最好的方法吗?如果不是我该怎么办?
我不确定2D如何在字典中工作..任何指针?
我想获得字典中所有键(可能还有子键)的良好输出。因此我写道:
print("The keys in this dictionary are:\n")
for k in mydict.keys():
print(k)
Run Code Online (Sandbox Code Playgroud)
这是有效的,但是有没有更简洁的方法来做到这一点?我尝试了列表理解,但是这当然会返回一个我无法与 may 介绍字符串连接的列表。有什么可以使用的功能吗?
编辑:字典可能是这样的:
mydict = {'key1':'value1',
'key2':{'subkey1':'subvalue1','subkey2':'subvalue2'}}
Run Code Online (Sandbox Code Playgroud)
我对“漂亮的格式”的含义持开放态度。但是,也许是这样的:
key1
key2: subkey1, subkey2
Run Code Online (Sandbox Code Playgroud) 摘要: 我想使用“模块”类型的变量并将其导出。
我正在使用import从.py文件中导入 python模块并对其进行更改。我需要将模块导出回文件或获取完整模块的字符串表示形式,然后可以将其写入磁盘。
我一直找不到任何方法可以导出python模块,也无法将模块内的对象转换为结构化,纯文本python可执行格式的字符串。(不是json,腌制等)
详细的问题和用例: 此要求是内部构建过程的一部分;没有安全要求,仅修改了我们自己的模块,而不是内置模块。python脚本与业务逻辑一起运行以修改许多其他脚本。此过程使用仅在构建时可用的信息。结果,我无法选择在运行时导入具有不同数据的模块。
最初的系统使用了带有占位符字符串的模板,该模板将被替换,但是当前的要求要求对对象声明进行更复杂的修改,其中以编程方式修改对象比替换字符串要容易得多。
我所做的事情 使用python编写的主生成器脚本,我可以导入多个模块(它们只有变量声明,没有可执行代码),并进行所有需要的替换。我剩下一个模块类型的变量,我需要将其导出回文件以供以后执行。
@abarnert有一些好主意。我不知道repr功能。那给了我信息,但没有任何格式。这使我看到了pprint,它与到目前为止我所想要的接近。
示例 example.py
sample = {
'level1_dict_1' : {
'key1' : 'value1',
'key2' : {
'level2_dict' : {
'key1' : 'value3',
'key2' : ['list1','list2','list3','list4'],
}
}
},
'level1_dict_2' : {
'key1' : 'value1',
'key2' : 'value2',
},
}
Run Code Online (Sandbox Code Playgroud)
大大简化了(并且没有应用任何业务逻辑),我基本上想执行以下操作:
with open("example.py","w") as outfile:
example = __import__('example') # Import module
example.sample['level1_dict_1']['key2']['level2_dict']['key2'][2] = "newlistitem3" # Change 1 property in a list nested a few levels deep
outfile.write("sample = \n" …Run Code Online (Sandbox Code Playgroud) 尝试在包含在defaultdict中的字典的结构中显示数据
dictionary=defaultdic(dict)
Run Code Online (Sandbox Code Playgroud)
例
defaultdict = {key1} :
{subkey1}:
(val1,
val2,
val3)
{subkey2}:
(val4,
val5,
val6)
{key2} :
{subkey3}:
(val7,
val8,
val9),
{subkey4}:
(val10,
val11,
val12)
Run Code Online (Sandbox Code Playgroud)
我试着这样做
for key in dictionary.iterkeys():
print key # This will return me the key
for items in dictionary[key]:
print items # This will return me the subkey
for values in dictionary[key][items]:
print values #this return the values for each subkey)
Run Code Online (Sandbox Code Playgroud)
问题是我只是打印出一个单独的项目清单; 当你有太多的物品和钥匙时几乎不可能遵循.
你如何正确地打印这样复杂的结构,以一种不会让你睁开眼睛的方式呈现它们?我尝试使用pprint和json.dumps,但两者都没有让情况变得更好.理想情况下,我想在我的示例中打印它,但我看不到一种简单的方法,而不会通过复杂的字符串操作来格式化打印输出.
我有一个像下面这样的json:
{"widget": {
"debug": "on",
"window": {
"title": "SampleWidget",
"name": "main_window",
"width": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
},
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}}
Run Code Online (Sandbox Code Playgroud)
我需要提取所有的键值对。例如debug=on,title=SampleWidget,name=main_window等等。我怎样才能以通用方式做到这一点?我的意思是 json 可以是示例中的 json 以外的任何其他内容,但过程应该是相同的。
python ×10
dictionary ×3
json ×2
2d ×1
collections ×1
key ×1
lxml ×1
pprint ×1
pretty-print ×1
python-2.7 ×1
r ×1
set ×1
xml ×1