объединить элементы в словаре в Python, используя понимание списка - PullRequest
4 голосов
/ 16 декабря 2009

РЕДАКТИРОВАТЬ: уточнил вопрос немного

Как получить строку из словаря в формате

key1 = value1
key2 = value2

относительно быстро? (относительно простой конкатенации)

Ответы [ 5 ]

10 голосов
/ 16 декабря 2009

Здесь нет смысла использовать понимание списка.

Python 3.x:

for k,v in mydict.items():
  print(k, '=', v)

Python 2.x:

for k,v in mydict.iteritems():
  print k, '=', v

РЕДАКТИРОВАТЬ из-за комментария OP в другом ответе:

Если вы передаете его функции, а не распечатываете здесь, то вам просто нужно передать генератор функции или самому диктовку и позволить функции обрабатывать все, что ей нужно с ней делать.

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

Я сделал функцию-обертку, поскольку редактирование основной функции исключено.

def log_wrap(mydict):
    mystr = '\n'.join(['%s = %s' % (k,v) for k,v in mydict.iteritems()])
    write_to_log(mydict)

log_wrap(mydict)
9 голосов
/ 16 декабря 2009
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems())
3 голосов
/ 16 декабря 2009

Явное лучше, чем неявное

Понимание списка - это способ создания списка , чтобы не избежать циклов.
От ОПТОСОЗ 202:

Список представлений обеспечивает более краткий способ создания списков в ситуации, когда map () и filter () и / или вложенные циклы в настоящее время будут б.

Так что вы должны спросить себя:
Когда полезно создать этот код на Python? Он может быть более компактным, но код читается намного чаще, чем пишется, так в чем же преимущество?

Решение Tor Valamo, хотя и не то, что было запрошено в первоначальном запросе, на мой взгляд, гораздо более читабельно и поэтому должно быть предпочтительным .

РЕДАКТИРОВАТЬ после обновления вопроса
str.join - это хороший способ реализовать быструю конкатенацию из списка, а ответы от Нади и Ричи - хороший пример того, как его использовать.
Опять же, я бы не выполнил бы все в одной строке, но я бы разбил его на несколько шагов, чтобы подчеркнуть удобочитаемость.

2 голосов
/ 16 декабря 2009

Как это:

DATA = {'key1': 'value1', 'key2': 'value2'}
print "\n".join(sorted(["%s = %s" % (k,v) for (k,v) in DATA.iteritems()]))
0 голосов
/ 16 декабря 2009

Я предпочитаю питонский способ:

mydict = {'a':1, 'b':2, 'c':3}
for (key, value) in mydict.items():
    print key, '=', value
...