2016-11-09 7 views
3

Ich versuche, Wörterbücher in StringWörterbücher in String-Python konvertieren

zum Beispiel zu konvertieren:

a={3:4,5:6} 
s='3 4, 5 6' 

Die Art und Weise ich versuche ist

s='' 
i=0 
for (k,v) in d.items(): 
    s=s+str(k)+' '+str(v) 
    while i < len(s): 
     if s[i]==str(v) and s[i+1]==str(k): 
      s+=s+s[i]+','+s[i+1] 
+0

Wollen ** Sie eigentlich, dass ** Format? Warum? –

Antwort

5

Hier ist eine Pythonic Art und Weise zu tun, dass mit einem list comprehension:

s = ', '.join([str(x) + ' ' + str(a[x]) for x in a]) 

Ausgang:

'3 4, 5 6' 

Update: Wie Julien Spronck erwähnt, sind die eckigen Klammern ([ und ]) sind nicht erforderlich. Somit hat die folgenden die gleiche Wirkung:

s = ', '.join(str(x) + ' ' + str(a[x]) for x in a) 

Working PythonFiddle

+2

stellt sich heraus, Sie tippen schneller ☺ –

+0

Sie brauchen nicht die eckigen Klammern, die dann einen Generator Ausdruck machen würde –

1

würde ich folgende mit einer Liste Verständnis verwenden:

', '.join([str(k) + ' ' + str(v) for k, v in a.items()]) 

Zur Veranschaulichung:

In [1]: a = {3:4, 5:6} 

In [2]: s = ', '.join([str(k) + ' ' + str(v) for k, v in a.items()]) 

In [3]: s 
Out[3]: '3 4, 5 6' 
+0

Ich mag das eigentlich besser als meine Antwort, da es die umständliche Verwendung von a [x] vermeidet. –

+0

@SumnerEvans Ich bevorzuge diesen Weg auch, aber Ihre Antwort ist tatsächlich prägnanter als meins, und es gibt sicherlich etwas dafür zu sagen. Hat Ihr vielleicht auch bessere Ergebnisse, da es keinen zusätzlichen Funktionsaufruf für 'items()' hat? – elethan

+1

Hmm ... Ich bin mir nicht sicher, wie Wörterbücher im Hintergrund gespeichert werden. Ich gehe davon aus, dass es sich nur um Tupel handelt. Daher sollte das Abrufen recht effizient sein, vielleicht sogar effizienter als das Abrufen der Schlüssel Werte. Ich bin mit der Bibliothek nicht genug vertraut, um das sicher zu sagen. –

3

Sie können wr ite die Liste Verständnis Ausdruck der Liste der Schlüssel-Wert-String zu erhalten, dann kommen sie auf , als

>>> d = {3:4,5:6} 
>>> ', '.join('{} {}'.format(k, v) for k, v in d.items()) 
'3 4, 5 6' 

OR, auch mit repr() (Hinweis: es ist ein Hack ist, halte ich .join() Ansatz pythonic):

>>> repr(d)[1:-1].replace(':', '') 
'3 4, 5 6' 
1

natürlich die pythonic Lösung ist die, die Liste Verständnis mit (@SumnerEvans und den Rest sehen), sondern nur um eine Alternative zu haben ich das hier wird schreiben:

a = {3: 4, 5: 6} 

v = str(a) 
for rep in ['{', '}', ':']: 
    v = v.replace(rep, '') 
print(v) # prints -> 3 4, 5 6 

Alles kann in eine Zeichenfolge umgewandelt werden und die als eine manipuliert werden. Dies wird hier gemacht. Von dict bis string und dann verkettet replace Methoden.

+1

Können Sie mit der Effizienz dieses vs Listenverständnis sprechen? –

+0

mein hunch sagt mir das listen verständnis ist viel schneller, aber ich kann nicht 'zeit' jetzt, da ich bei der arbeit bin .. Fühlen Sie sich frei, es zu versuchen. –

0

Sie können es immer noch wie diese

s='' 
i=0 
a={3:4,5:6} 
for (k,v) in a.items(): 
    if i < len(a) and s == '': 
     s = s + str(k) + ' '+ str(v) 
    elif i < len(a) and s != '': 
     s += ", " + str(k) + ' '+ str(v) 
    i += 1 
    print(s) 

Dies sollte Ihnen

s='3 4, 5 6' 
Verwandte Themen