Python. Как удалить фигурные скобки при выводе значения словаря?
users_data_p = Path("users_data.json")
users_data = json.loads(users_data_p.read_text(encoding='utf-8'))
users_data_list = list(users_data.items())
users_data_list.sort(key=lambda j: j[1].get('messages'))
for i in reversed(users_data_list):
print(str(i[1]))
Выводит это:
{'messages': 145}
{'messages': 112}
{'messages': 90}
{'messages': 42}
Можно как-то убрать фигурные скобки и кавычки?
UPD: Вот таким образом я смог убрать фигурные скобки, но кавычки остались
print(str(i[1])[1:-1].format())
Ответы (4 шт):
попробуйте так:
users_data_list = [
[1, {'messages': 42}],
[2, {'messages': 90}],
[3, {'messages': 112}],
[4, {'messages': 145}],
]
for i in reversed(users_data_list):
k, v = list(i[1].items())[0]
print(f'{k}: {v:>3}')
Когда вы выводите какой-то объект через функцию print или вызываете функцию str(object), то на они в своей реализации обращаются к методу __str__ данного объекта.
В данном случае i[1] - это словарь, который стандартно выводится как {key1: value1, key2: value2, ...}.
Для того, чтобы вывести словарь в удобном для вас виде, нужно пройти в цикле по всем его парам ключ-значение, либо обратиться к конкретным значениям по их ключам. Поскольку у вас словарь состоит всегда из одного элемента, это можно реализовать и без цикла, например, так:
for i in reversed(users_data_list):
k, v = list(i[1].items())[0]
print(f"{k}: {v}")
Можно сделать свой словарь, чтобы не писать каждый раз цикл:
In [4]: class ReprDict(dict):
...: def __repr__(self):
...: return "\n".join(f"{k}: {v}" for k, v in self.items())
...:
In [5]: d = ReprDict({1: 2, "hello": "world"})
In [6]: d
Out[6]:
1: 2
hello: world
In [7]: print(d)
1: 2
hello: world
Можно так
for i in reversed(users_data_list):
for key in i[1]:
print(i[0], '->', key, ':', i[1].get(key))