Подтвердить что ты не робот

Python: словарь в строку, пользовательский формат?

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

'<br/>'.join(mydict)

как отображать их как key:: value, каждая в новой строке?

4b9b3361

Ответ 1

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

'<br/>'.join(['%s:: %s' % (key, value) for (key, value) in d.items()])

Ответ 2

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

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

Помните, что у dicts нет порядка, поэтому без sorted() вы можете не получить то, что хотите:

>>> mydict = dict(a="A", b="B", c="C")
>>> ", ".join("=".join(_) for _ in mydict.items())
'a=A, c=C, b=B'

Это также работает, когда все клавиши и значения являются строками, иначе 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'

Ответ 4

Мне понравилось то, что сделал Филип Дюпанович. Я изменил это как 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()])

Ответ 5

Если вы хотите быть более питоническим, мы можем полностью удалить for -comprehension.

'<br/>'.join(map(':: '.join, mydict.items())