0

有没有一种简单的方法可以在 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)
4

3 回答 3

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)
于 2018-12-04T00:07:03.387 回答
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)

输出:

['床头板','床垫']

于 2018-12-04T00:18:38.167 回答
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)

输出:

['床头板','床垫']

于 2018-12-04T01:06:52.453 回答