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

时间:2018-12-04 00:02:40

标签: 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': '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)

3 个答案:

答案 0 :(得分:1)

您可以使用pprint.pprint

>>> pprint([{'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_id': '9',
  'children': [],
  'is_active': '1',
  'level': '3',
  'name': 'Headboard',
  'parent_id': '3',
  'position': '6'},
 {'category_id': '10',
  'children': [],
  'is_active': '1',
  'level': '3',
  'name': 'Mattress',
  'parent_id': '3',
  'position': '7'}]

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

>>> [x['name'] for x in ...]

或者,您可以使用json.dump(s) +您选择的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)

答案 1 :(得分:1)

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

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)

输出:

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

答案 2 :(得分:0)

如果数据实际上是字典的字典,则其格式为:{ "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)

输出:

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