Вывод понимания списка в отдельной строке

#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 он работает. В любом случае, я думаю, вам следует обратить внимание, если вас интересует порядок ключей