2012-05-06 18 views
9

Estoy tratando de utilizar la solución aportada hereCómo convertir en el diccionario de cadena

En vez de conseguir un diccionario, ¿cómo puedo obtener una cadena con el mismo carácter es decir, la salida seguido por el número de ocurrencias

Ejemplo: d2m2e2s3

+3

¿Cómo desea que se formatee la secuencia? – Amber

+0

¿Puedes explicar la entrada y la salida? ¿Está tratando de hacer cadena del diccionario 'Out [25]: {'d': 2, 'f': 2, 'g': 2, 'q': 5, 'w': 3} ' – shibly

+0

I quiere la salida como d2f2g2q5w3 – TechacK

Respuesta

29

convertir de la dict a la cadena en el formato que desee:

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

si quieres que ordenadas alfabéticamente por clave:

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

Quiero las letras seguidas por cada vez que ha ocurrido en la secuencia original en orden. – TechacK

+0

Intenté Python 2.6, ValueError: nombre de campo de longitud cero en formato. debería ser el formato '' .join ('{0} {1}'. (clave, val) para la clave, val in adict.items()) –

1

una vez que tenga la solución dict, sólo tiene que utilizar unirse a unirse a ellos en una cadena:

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

Puede reemplazar el '' con lo separater (incluyendo ninguno) que desea entre los números

+0

La salida requerida es del tipo: d2m2e2s3 – TechacK

+0

Bien, modifiqué mi respuesta para incluir la clave (es decir, la letra) – happydave

+0

Quiero las letras seguidas por cada vez que ha ocurrido en la cadena original en orden – 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 si los quieres alfabéticamente ...

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

o si los quieres con el fin de aumentar el recuento ...

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

Quiero las letras seguidas por cada vez que ha ocurrido en la cadena original en orden – TechacK

3

¿Es esto lo que busca?

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

de salida: q5w3d2g2f2

O esto?

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

salida: d2f2g2q5w3

Ejemplo 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())) 

salida: 'd2 f2 g2 q5 w3'

+0

No es la mejor variante porque la comprensión de lista y la concatenación de cadenas con 'join' es más rápida – San4ez

+0

Quiero las letras seguidas cada vez que ha ocurrido en la cadena original en orden – TechacK

+0

¿Funciona el segundo código? – shibly

0

Otro enfoque, evitando la % interpolación (o format()) mediante el uso de join() solamente:

''.join(''.join((k, str(v))) for k,v in mydict.items()) 
Cuestiones relacionadas