Python: словарь в строку, пользовательский формат? - PullRequest
27 голосов
/ 15 декабря 2011

В настоящее время я отображаю только ключи, каждая в новой строке:

'<br/>'.join(mydict)

как отобразить их как ключ :: значение , каждое в новой строке?

Ответы [ 4 ]

76 голосов
/ 15 декабря 2011

Пройдите через итератор dict.items(), который даст ключ, значение кортеж:

'<br/>'.join(['%s:: %s' % (key, value) for (key, value) in d.items()])
4 голосов
/ 24 декабря 2017

В Python 3.6 я предпочитаю этот синтаксис, который делает код еще более читабельным:

'<br/>'.join([f'{key}: {value}' for key, value in d.items()])

См. PEP 498 - Интерполяция буквенных строк

4 голосов
/ 05 марта 2016

Это или даже более прохладное решение, использующее join для объединения обоих элементов и (ключ, значение), избегая устаревшей теперь интерполяции %, используя только одну фиктивную переменную _ и отбрасывая избыточное понимание списка:

"<br/>".join(":: ".join(_) for _ in mydict.items())

Имейте в виду, что у диктовок нет упорядочивания, поэтому без sorted() вы можете не получить того, что хотите:также работает только тогда, когда все ключи и значения являются строками, в противном случае join будет жаловаться.Более надежное решение было бы:

", ".join("=".join((str(k),str(v))) for k,v in mydict.items())

Теперь оно отлично работает, даже для ключей и значений смешанных типов:

>>> mydict = {'1':1, 2:'2', 3:3}
>>> ", ".join("=".join((str(k),str(v))) for k,v in mydict.items())
'2=2, 3=3, 1=1'

Конечно, для смешанных типов обычный sorted()не будет работать, как ожидалось.Используйте его, только если вы знаете, что все ключи являются строками (или все числовые и т. Д.).В первом случае вы можете сбросить и первую str():

>>> mydict = dict(a=1, b=2, c=2)
>>> ", ".join("=".join((k,str(v))) for k,v in sorted(mydict.items()))
'a=1, b=2, c=3'
1 голос
/ 15 июня 2017

Мне понравилось то, что Филипп Дупанович сделал выше.Я изменил это значение на python3-ish, используя метод str.format.

'<br/>'.join(['{0}:: {1}'.format(key, value) for (key, value) in d.items()])

Я изменил вышеприведенное, чтобы сгенерировать строку, которую можно передать в оператор создания таблицы SQL.

fieldpairs = ','.join(['{0} {1}'.format(key, value) for (key, value) in HiveTypes.items()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...