#python #list-comprehension
#python #понимание списка
Вопрос:
Я хочу, чтобы каждая пара (ключ, значение) печаталась в отдельной строке из этого понимания списка,
print({'Doc. ' k '.txt: ':v for k, v in dict.items()})
Например:
{'Doc. 23.txt: ': 0.027716832767124815,
'Doc. 7.txt: ': 0.016852886586198594,
'Doc. 17.txt: ': 0.014667013392619908,
'Doc. 37.txt: ': 0.01410963740876677}
Я попытался объединить ‘ n’, что здесь не имеет никакого эффекта.
Спасибо за любую помощь.
P.S: Использование pprint()
нарушит порядок значений, который недоступен.
Ответ №1:
Вы хотите что-то подобное?
mydict = {23: 0.027716832767124815,
7: 0.016852886586198594,
17: 0.014667013392619908,
37: 0.01410963740876677}
print('{' ',n'.join(
["'Doc. {}.txt': {}".format(k, v) for k, v in mydict.items()]
) '}')
Обратите внимание на квадратные скобки внутри печати. Они обозначают понимание списка (в то время как фигурные скобки представляют собой понимание по словарю). В этом коде вы можете заменить понимание списка пониманием генератора (круглые скобки) с тем же конечным результатом.
',n'.join(list)
вставляет ',n'
между элементами списка, предоставляя результат, который вы просили.
Комментарии:
1. Это сработало! Высоко оценен. Я дам прочитать понимание генератора.
2. Формально они называются «выражения генератора» .
Ответ №2:
Вы могли бы создать свою собственную функцию печати / форматирования только для этого:
def my_print_function(d, prefix="", suffix=""):
print("{", end="")
for i, (k, v) in enumerate(d.items()):
if i == 0:
print("'{}{}{}': {},".format(prefix, k, suffix, v))
else:
print(" '{}{}{}': {},".format(prefix, k, suffix, v))
print("}")
my_print_function(my_dict, "Doc. ", ".txt: ")
# {'Doc. 23.txt: ': 0.027716832767124815,
# 'Doc. 7.txt: ': 0.016852886586198594,
# 'Doc. 17.txt: ': 0.014667013392619908,
# 'Doc. 37.txt: ': 0.01410963740876677,
# }
Насколько мне известно, вы не сможете сделать это с пониманием. Кроме того, вам следует избегать присвоения имен вещам, dict
поскольку это перезаписывает dict
конструктор.
Ответ №3:
Словари не имеют порядка, поэтому, если вы хотите, чтобы ключи были отсортированы как [23, 7, 17, 37]
, вы могли бы сделать что-то вроде:
>>> import json
>>> from collections import OrderedDict
>>>
>>> order = ["23", "7", "17", "37"]
>>> d = {
... "23": 0.0277,
... "7": 0.0168,
... "17": 0.0146,
... "37": 0.0141
... }
>>> sorted_d = OrderedDict([("Doc." k ".txt:", d[k]) for k in order])
>>> print(json.dumps(sorted_d, indent=4))
{
"Doc.23.txt:": 0.0277,
"Doc.7.txt:": 0.0168,
"Doc.17.txt:": 0.0146,
"Doc.37.txt:": 0.0141
}
Комментарии:
1. Начиная с Python 3.6, словари упорядочены, хотя это результат определенной оптимизации структуры базовых данных и не гарантируется, что они останутся навсегда.
2. Я не знаю, на какой версии python он работает. В любом случае, я думаю, вам следует обратить внимание, если вас интересует порядок ключей