Как хорошо распечатать словарь в 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])

Спасибо!

Ответ 1

Мне нравится модуль pprint, включенный в Python. Его можно использовать для печати объекта или для его форматирования.

import pprint

# Prints the nicely formatted dictionary
pprint.pprint(dictionary)

# Sets 'pretty_dict_str' to 
pretty_dict_str = pprint.pformat(dictionary)

Но похоже, что вы распечатываете инвентарь, который, скорее всего, будет выглядеть как нечто похожее на следующее:

def print_inventory(dct):
    print("Items held:")
    for item, amount in dct.iteritems():
        print("{} ({})".format(item, amount))

inventory = {
    "shovels": 3,
    "sticks": 2,
    "dogs": 1,
}

print_inventory(inventory)

который печатает:

Items held:
shovels (3)
sticks (2)
dogs (1)

Ответ 2

Мой любимый способ:

import json
print(json.dumps(dictionary, indent=4, sort_keys=True))

Ответ 3

Вот один вкладыш я бы использовал. (Изменение: работает для вещей, которые не являются JSON-сериализуемыми тоже)

print("\n".join("{}\t{}".format(k, v) for k, v in dictionary.items()))

Объяснение: Это перебирает ключи и значения словаря, создавая форматированную строку, такую как ключ + вкладка + значение для каждого. И "\n".join(... ставит новые строки между всеми этими строками, образуя новую строку.

Пример:

>>> dictionary = {1: 2, 4: 5, "foo": "bar"}
>>> print("\n".join("{}\t{}".format(k, v) for k, v in dictionary.items()))
1   2
4   5
foo bar
>>>

Ответ 4

Согласитесь, "красиво" очень субъективно. Посмотрите, поможет ли это, что я использовал для отладки dict

for i in inventory_things.keys():
    logger.info('Key_Name:"{kn}", Key_Value:"{kv}"'.format(kn=i, kv=inventory_things[i]))

Ответ 5

Я написал эту функцию для печати простых словарей:

def dictToString(dict):
  return str(dict).replace(', ','\r\n').replace("u'","").replace("'","")[1:-1]