Вы получаете это:
>>> raw_data = {'post 1': 'link 1', 'post 2': 'link 2'}
>>> data = [("Post:{}\nLink: {}").format(title, link) for title, link in raw_data.items()]
>>> print(data)
['Post:post 1\nLink: link 1', 'Post:post 2\nLink: link 2']
Это не то, что вы ожидали, но это обычный вывод Python. См. Документ :
Все аргументы, не являющиеся ключевыми словами, преобразуются в строки, как это делает str (), и записываются в поток
Давайте попробуем:
>>> str(data)
"['Post:post 1\\nLink: link 1', 'Post:post 2\\nLink: link 2']"
Обратите внимание на двойные кавычки вокруг результата и двойную обратную косую черту: str(data)
- это строка, представляющая список, а print
печатает эту строку ... а не ее содержимое. Это очень отличается от:
>>> for s in data: print(s)
...
Post:post 1
Link: link 1
Post:post 2
Link: link 2
Чтобы сосредоточиться на разнице, взгляните на одну строку:
>>> s = "a\nb"
>>> s # the value of the string s
'a\nb'
>>> print(s) # outputs the string s
a
b
Подводя итог: печать элементов списка отличается от печати самого списка. Используйте for s in data: print(s)
, чтобы получить то, что вы хотите.
РЕДАКТИРОВАТЬ если вы хотите вернуть печатный результат из функции, вы должны создать свою собственную строку, то есть data[0]+"\n"+data[1]
, или с join
:
>>> s = "\n".join(data)
>>> s # return this string
'Post:post 1\nLink: link 1\nPost:post 2\nLink: link 2'
>>> print(s)
Post:post 1
Link: link 1
Post:post 2
Link: link 2