2011-04-29 15 views
8

tengo un diccionario decir ..pitón unirse equivalente

dict = { 
    'a' : 'b', 
    'c' : 'd' 
} 

en PHP me a algo así como implosión ('', $ dict) y obtener la salida 'a, b, c, d' ¿Cómo hago eso en Python?

+1

Diccionarios en Python son desordenada. Solo pensé que te gustaría saber. –

+3

Y para que conste, no entiendo los votos abajo. Esta es una pregunta legítima con una respuesta fascinante. –

+1

@Ignacio - Me pregunto también. Mi motivación para responder a continuación fue responder la pregunta. Entendía los votos a favor si mi respuesta (identificada como poco elegante) era incorrecta. suspiro – mishaF

Respuesta

6

Ésta parece ser manera más fácil:

>>> from itertools import chain 
>>> a = dict(a='b', c='d') 
>>> ','.join(chain(*a.items())) 
'a,b,c,d' 
+0

no necesita la lista() allí –

+0

@gnibbler, de hecho, corregido. –

+0

thx mate. todo lo que necesitaba :) –

-1

dictList = dict.items()

Esto devolverá una lista de todos los artículos.

+0

esto devolverá ** pares ** de valores (tuplas o lo que sea) –

0

Esto no es muy elegante, pero funciona:

result=list() 
for ind in g: 
    result.append(ind) 
    for cval in g[ind]: 
     result.append(cval) 
4

Usar cadena join en una lista lineal de los elementos del diccionario como esto:

",".join(i for p in dict.items() for i in p) 

Además, es probable que desee utilizar OrderedDict.

+0

+1 - como su solución. – manojlds

1
a=[] 
[ a.extend([i,j]) for i,j in dict.items() ] 
1

De cualquier

[value for pair in {"a": "b", "c" : "d"}.iteritems() for value in pair] 

o

(lambda mydict: [value for pair in mydict.iteritems() for value in pair])({"a": "b", "c" : "d"}) 

Explicación:

simplificado este ejemplo es de regreso cada valor de cada par en el Editar mydict

: también poner a "" join() alrededor de estos.. No he leído tu pregunta correctamente

5

primer lugar, el mal respuesta:

','.join('%s,%s' % i for i in D.iteritems()) 

Esta respuesta es incorrecta, ya que, mientras que los arrays asociativos en PHP hacer tienen un orden dado, diccionarios en Python no. La manera de compensar esto es para cualquiera que use un tipo de asignación ordenada (como OrderedDict), o para forzar una orden explícita:

','.join('%s,%s' % (k, D[k]) for k in ('a', 'c')) 
2

Esto tiene un rendimiento de segundo grado, pero si el diccionario es siempre pequeña, que pueden no asunto al que

>>> sum({'a':'b','c':'d'}.items(),()) 
('a', 'b', 'c', 'd') 

nota que los dict.items() no conserva el orden, por lo que ('c', 'd', 'a', 'b') sería también una posible salida de

1

Sé que esta es una vieja pregunta, pero también es bueno tener en cuenta.

La pregunta original es engañosa.implosión() no aplanar una matriz asociativa en PHP, se une a los valores

echo implode(",", array("a" => "b", "c" => "d")) 
// outputs b,d 

implode() sería el mismo que

",".join(dict.values()) 
# outputs b,d