格式化通过xmlrpc接收的python字典以获得良好的输出

格式化通过xmlrpc接收的python字典以获得良好的输出,python,dictionary,formatting,Python,Dictionary,Formatting,有没有一种简单的方法可以在python中格式化一个字典以获得良好的输出 目前我正在学习如何在python中与API/XMLRPC交互。提出请求后,我得到了一个如下格式的词典: {'category_id': '9', 'parent_id': '3', 'name': 'Headboard', 'is_active': '1', 'position': '6', 'level': '3', 'children': []}, {'category_id': '10', 'parent_id': '

有没有一种简单的方法可以在python中格式化一个字典以获得良好的输出

目前我正在学习如何在python中与API/XMLRPC交互。提出请求后,我得到了一个如下格式的词典:

{'category_id': '9', 'parent_id': '3', 'name': 'Headboard', 'is_active': '1', 'position': '6', 'level': '3', 'children': []}, {'category_id': '10', 'parent_id': '3', 'name': 'Mattress', 'is_active': '1', 'position': '7', 'level': '3', 'children': []},
这是一个文字墙,很容易几页。有没有一种简单的方法可以很好地显示这些数据,或者仅仅在一行上输出每个类别的名称

编辑:

下面是一个通过pprint打印的尝试,结果省略了很多数据:

import xmlrpc.client
import pprint
svc = xmlrpc.client.ServerProxy('https://example.com/api/xmlrpc/')
session = svc.login('apiuser', 'apikey')
temp = svc.call(session, 'catalog_category.tree')
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(temp)
您可以使用:

要仅显示类别名称,可以执行以下操作:

>>> [x['name'] for x in ...]
或者,您可以使用
json.dump
+您选择的json查看器(提供大量在线选项,或者仅使用本地浏览器)

编辑 以递归方式处理:

import copy

t2 = copy.deepcopy(temp)  # Modify for printing.
items = [t2]
while items:
    item = items.pop(-1)
    del item['category_id']
    del item['is_active']
    del item['level']
    del item['position']
    ...  # Whatever other keys you want to delete.
    items += item.get('children', [])
pprint(t2)
您可以使用:

要仅显示类别名称,可以执行以下操作:

>>> [x['name'] for x in ...]
或者,您可以使用
json.dump
+您选择的json查看器(提供大量在线选项,或者仅使用本地浏览器)

编辑 以递归方式处理:

import copy

t2 = copy.deepcopy(temp)  # Modify for printing.
items = [t2]
while items:
    item = items.pop(-1)
    del item['category_id']
    del item['is_active']
    del item['level']
    del item['position']
    ...  # Whatever other keys you want to delete.
    items += item.get('children', [])
pprint(t2)

这将为您提供一个类别名称列表:

list_of_dicts = [{'category_id': '9', 'parent_id': '3', 'name': 'Headboard', 'is_active': '1', 'position': '6', 'level': '3', 'children': []}, {'category_id': '10', 'parent_id': '3', 'name': 'Mattress', 'is_active': '1', 'position': '7', 'level': '3', 'children': []}]

category_names = [dict['name'] for dict in list_of_dicts]

print(category_names)
输出:


[“床头板”、“床垫”]

这将为您提供一个类别名称列表:

list_of_dicts = [{'category_id': '9', 'parent_id': '3', 'name': 'Headboard', 'is_active': '1', 'position': '6', 'level': '3', 'children': []}, {'category_id': '10', 'parent_id': '3', 'name': 'Mattress', 'is_active': '1', 'position': '7', 'level': '3', 'children': []}]

category_names = [dict['name'] for dict in list_of_dicts]

print(category_names)
输出:


['Headboard','matd']

如果数据实际上是一个字典字典,那么它的形式是:
{“key_1”:{},“key_2”:{}…“key_n”:{}

然后,以下代码将创建类别名称列表:

dict_of_dicts = {"key_a": {'category_id': '9', 'parent_id': '3', 'name': 'Headboard', 'is_active': '1', 'position': '6', 'level': '3', 'children': []}, "key_b": {'category_id': '10', 'parent_id': '3', 'name': 'Mattress', 'is_active': '1', 'position': '7', 'level': '3', 'children': []}}

category_names = [dict["name"] for dict in dict_of_dicts.values()]
print(category_names)
输出:


['Headboard','matd']

如果数据实际上是一个字典字典,那么它的形式是:
{“key_1”:{},“key_2”:{}…“key_n”:{}

然后,以下代码将创建类别名称列表:

dict_of_dicts = {"key_a": {'category_id': '9', 'parent_id': '3', 'name': 'Headboard', 'is_active': '1', 'position': '6', 'level': '3', 'children': []}, "key_b": {'category_id': '10', 'parent_id': '3', 'name': 'Mattress', 'is_active': '1', 'position': '7', 'level': '3', 'children': []}}

category_names = [dict["name"] for dict in dict_of_dicts.values()]
print(category_names)
输出:



['Headboard','Matd']

这看起来像JSON,而不是XML。API只有SOAP和XMLRPC接口。我刚刚听了一个关于用python连接API的教程,它说你可以得到一个python字典,这就是我得到的。@不可纠正的是,它不是JSON,它是一个python字典。OP已经分析过了。@roganjosh我现在明白了。“格式化如下”让我有点困惑。这看起来像JSON,而不是XML。API只有SOAP和XMLRPC接口。我刚刚听了一个关于用python连接API的教程,它说你可以得到一个python字典,这就是我得到的。@不可纠正的是,它不是JSON,它是一个python字典。OP已经分析过了。@roganjosh我现在明白了。“格式如下”有点让我困惑。我确实根据搜索问题时找到的答案尝试了pprint。问题是很多数据随后丢失了。如果你愿意的话,我可以把整本字典的内容和在粘贴箱上使用pprint的结果张贴出来。@JakeRankin是的,请。也许是你的主机出了问题?你看过pformat和转储到文件了吗?我不熟悉pformat,对python和API非常陌生,现在正在阅读。这是我通过xmlrpc:收到的整个dict的粘贴,这是显示用pprint:打印结果的粘贴箱,我用来打印它的代码:@JakeRankin您发布的数据不是
dict
。实际上,它不是有效的Python语法。我想知道它到底是什么。你是怎么得出这个结论的?您能检查打印(类型(临时))吗?看起来这个数据已经有问题了。您是否可能仅通过执行
print(temp)
即可获得“原始”数据?如果是这样的话,您可能达到了控制台的最大长度,因此它切断了开头,因此它是不完整的。我确信这是一个dict。API文档中说的内容将通过XMLRPC返回,并且我在发布之前打印了(type(temp)),返回“我确实根据搜索问题时找到的答案尝试了pprint。问题是很多数据随后丢失了。如果你愿意的话,我可以把整本字典的内容和在粘贴箱上使用pprint的结果张贴出来。@JakeRankin是的,请。也许是你的主机出了问题?你看过pformat和转储到文件了吗?我不熟悉pformat,对python和API非常陌生,现在正在阅读。这是我通过xmlrpc:收到的整个dict的粘贴,这是显示用pprint:打印结果的粘贴箱,我用来打印它的代码:@JakeRankin您发布的数据不是
dict
。实际上,它不是有效的Python语法。我想知道它到底是什么。你是怎么得出这个结论的?您能检查打印(类型(临时))吗?看起来这个数据已经有问题了。您是否可能仅通过执行
print(temp)
即可获得“原始”数据?如果是这样,您可能达到了控制台的最大长度,因此它截断了开头,因此它是不完整的。我确信这是一个dict。API文档中说的内容将通过XMLRPC返回,我在发布之前打印了(type(temp)),返回“”然后,您可以按自己的意愿打印此列表。此列表是否与我通过xmlrpc收到的dict相同?我编辑了我的问题,以显示我用来接收字典的代码,字典分配给代码中的临时值。我用你的代码用temp代替list_of_dicts,但这不起作用,说字符串索引必须是整数。字典是用{}括起来的,你的数据是{},{}的形式,所以有多个字典。我假设这些存储在一个列表中,例如[{},{}],但情况可能不是这样。我不确定使用什么数据结构来保存多个字典,试着这样做以找出答案,然后可能在这里发帖:type(temp)type(temp)返回类'dict',好的,所以看起来您有一个字典字典,即{{},{},{},{}..{}。我会修改我的答案。然后你可以随意打印这份清单。清单和我收到的清单一样吗