Форматирование словаря Python, полученного через xmlrpc, для приятного вывода - PullRequest
0 голосов
/ 04 декабря 2018

Есть ли простой способ отформатировать словарь в python для приятного вывода?

В настоящее время я учусь взаимодействовать с API / XMLRPC в python.После запроса я получаю словарь обратно в следующем формате:

{'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': []},

Это текстовая стена, легко несколько страниц.Есть ли простой способ красиво отобразить эти данные или, возможно, просто вывести имя каждой категории в одну строку?

edit:

Вот попытка напечатать ее через 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 голосов
/ 04 декабря 2018

Это даст вам список названий категорий:

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', 'Mattress']

0 голосов
/ 04 декабря 2018

Если данные на самом деле являются словарями словарей, такими, что они имеют вид: { "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)

ВЫХОД:

['Спинка кровати', 'Матрас']

0 голосов
/ 04 декабря 2018

Вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...