2012-05-06 17 views
9

Sto cercando di utilizzare la soluzione fornita hereCome convertire dizionario nella stringa

Invece di ottenere un dizionario, come posso ottenere una stringa con lo stesso carattere di uscita cioè seguito dal numero di occorrenze

Esempio: d2m2e2s3

+3

Come si desidera che la stringa venga formattata? – Amber

+0

Puoi spiegare l'input e l'output? Stai cercando di creare una stringa dal dizionario 'Out [25]: {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} ' – shibly

+0

I voglio l'output come d2f2g2q5w3 – TechacK

risposta

29

per convertire dal dict alla stringa nel formato che si desidera:

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

se si vuole che in ordine alfabetico da chiave:

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

Voglio le lettere seguite da ogni volta che si è verificato nella stringa originale in ordine. – TechacK

+0

Ho provato Python 2.6, ValueError: nome campo lunghezza zero in formato. dovrebbe essere '' .join ('{0} {1}'. format (key, val) per key, val in adict.articoli()) –

1

una volta che avete la soluzione dict, basta usare iscriverti per unirsi a loro in una stringa:

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

È possibile sostituire il '' con qualsiasi separater (anche nessuno) che si desidera tra i numeri

+0

L'output richiesto è di tipo: d2m2e2s3 – TechacK

+0

Ok, ho modificato la mia risposta per includere la chiave (cioè la lettera) – happydave

+0

Voglio le lettere seguite da ogni volta che si è verificata nella stringa originale nell'ordine – 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' 

o se li volete in ordine alfabetico ...

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

o se li vuoi in ordine di numero crescente ...

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

Voglio le lettere seguite da ogni volta che si è verificato nella stringa originale nell'ordine – TechacK

3

E 'questo quello che stai cercando?

#!/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 

uscita: q5w3d2g2f2

O questo?

#!/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 

uscita: d2f2g2q5w3

Esempio con 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())) 

uscita: 'd2 f2 g2 q5 w3'

+0

Non è la variante migliore perché la comprensione delle liste e la concatenazione di stringhe con 'join' è più veloce – San4ez

+0

Voglio le lettere seguite da ogni volta si è verificato nella stringa originale nell'ordine – TechacK

+0

Il secondo codice funziona? – shibly

0

altro approccio, evitando il % interpolazione (o format()) utilizzando solo join():

''.join(''.join((k, str(v))) for k,v in mydict.items()) 
Problemi correlati