2012-05-06 7 views
9

Я пытаюсь использовать решение при условии hereКак конвертировать словарь в строку

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

Пример: d2m2e2s3

+3

Как вы хотите, чтобы строка была отформатирована? – Amber

+0

Можете ли вы объяснить ввод и вывод? Вы пытаетесь сделать строку из словаря 'Out [25]: {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} ' – shibly

+0

I хотите выход как d2f2g2q5w3 – TechacK

ответ

29

Для преобразования из Dict в строку в формате, который вы хотите:

''.join('{}{}'.format(key, val) for key, val in adict.items()) 

, если вы хотите их в алфавитном порядке по ключ:

''.join('{}{}'.format(key, val) for key, val in sorted(adict.items())) 
+0

Я хочу буквы, за которыми следуют каждый раз, когда они произошли в исходной строке по порядку. – TechacK

+0

Я пробовал python 2.6, ValueError: имя поля нулевой длины в формате. должен быть '. .join (' {0} {1} '. format (ключ, val) для ключа, val в adict.items()) –

1

После того, как у вас есть решение Dict, просто использовать присоединиться к ним присоединиться в строку:

''.join([k+str(v) for k,v in result.iteritems()])

Вы можете заменить '' с любой separater (не включая ни одного) вы хотите между числами

+0

Требуемый выход имеет тип: d2m2e2s3 – TechacK

+0

Хорошо, я изменил свой ответ, чтобы включить ключ (то есть письмо) – happydave

+0

Я хочу, чтобы буквы сопровождались каждый раз, когда он произошел в исходной строке, в порядке – TechacK

1
>>> result = {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 
>>> ''.join('%s%d' % (k,v) for k,v in result.iteritems()) 
'q5w3d2g2f2' 

или если вы хотите, чтобы они в алфавитном порядке ...

>>> ''.join('%s%d' % (k,v) for k,v in sorted(result.iteritems())) 
'd2f2g2q5w3' 

или если вы хотите, чтобы они в порядке возрастания кол ...

>>> ''.join('%s%d' % (k,v) for k,v in sorted(result.iteritems(),key=lambda x:x[1])) 
'd2g2f2w3q5' 
+0

Я хочу, чтобы буквы сопровождались каждый раз, когда он произошел в исходной строке, в порядке – TechacK

3

Это то, что вы ищете?

#!/usr/bin/python 

dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 
st="" 
for key,val in dt.iteritems(): 
    st = st + key + str(val) 

print st 

выход: q5w3d2g2f2

Или это?

#!/usr/bin/python 

dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 
dt=sorted(dt.iteritems()) 
st="" 

for key,val in dt: 
    st = st + key + str(val) 

print st 

выход: d2f2g2q5w3

Пример с join:

#!/usr/bin/python 

adict=dt={'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} 
' '.join('{0}{1}'.format(key, val) for key, val in sorted(adict.items())) 

выход: 'd2 f2 g2 q5 w3'

+0

Это не лучший вариант, потому что понимание списка и конкатенация строк с 'join' быстрее – San4ez

+0

Я хочу, чтобы буквы сопровождались каждым раз произошло в исходной строке в порядке – TechacK

+0

Работает ли второй код? – shibly

0

Другой подход, избегая % интерполяции (или format()) с помощью join() только:

''.join(''.join((k, str(v))) for k,v in mydict.items()) 
Смежные вопросы