it-swarm.com.de

python: Wörterbuch zu String, benutzerdefiniertes Format?

momentan zeige ich nur Schlüssel an, jeweils in einer neuen Zeile:

'<br/>'.join(mydict)

wie zeige ich sie wie key :: value an, jeweils in der neuen Zeile?

25
migajek

Gehen Sie durch den dict.items()-Iterator, der einen Schlüssel mit dem Wert Tuple ergibt:

'<br/>'.join(['%s:: %s' % (key, value) for (key, value) in d.items()])
74

Das oder eine noch coolere Lösung, die join verwendet, um beide Elemente und die (Schlüssel, Wert) -Paare zu verbinden, die jetzt nicht mehr benötigte %-Interpolation zu verwenden, nur eine einzige Dummy-Variable _ zu verwenden, und das redundante Listenverständnis zu löschen:

"<br/>".join(":: ".join(_) for _ in mydict.items())

Beachten Sie, dass Diktate keine Reihenfolge haben. Ohne sorted() erhalten Sie möglicherweise nicht das, was Sie möchten:

>>> mydict = dict(a="A", b="B", c="C")
>>> ", ".join("=".join(_) for _ in mydict.items())
'a=A, c=C, b=B'

Dies funktioniert auch nur, wenn alle Schlüssel und Werte Zeichenfolgen sind, andernfalls beschwert sich join. Eine robustere Lösung wäre:

", ".join("=".join((str(k),str(v))) for k,v in mydict.items())

Jetzt funktioniert es auch für Schlüssel und Werte gemischter Typen hervorragend:

>>> mydict = {'1':1, 2:'2', 3:3}
>>> ", ".join("=".join((str(k),str(v))) for k,v in mydict.items())
'2=2, 3=3, 1=1'

Bei gemischten Typen funktioniert eine einfache sorted() natürlich nicht wie erwartet. Verwenden Sie es nur, wenn Sie wissen, dass alle Tasten Strings sind (oder alle numerischen Werte usw.). Im ersten Fall können Sie auch die erste str() löschen:

>>> mydict = dict(a=1, b=2, c=2)
>>> ", ".join("=".join((k,str(v))) for k,v in sorted(mydict.items()))
'a=1, b=2, c=3'
4
MestreLion

In Python 3.6 bevorzuge ich diese Syntax, die den Code noch lesbarer macht:

'<br/>'.join([f'{key}: {value}' for key, value in d.items()])

Siehe PEP 498 - Interpolation von Zeichenketten

3
firepol

Mir hat gefallen, was Filip Dupanović oben gemacht hat. Ich habe dies mit der str.format-Methode in python3-ish geändert.

'<br/>'.join(['{0}:: {1}'.format(key, value) for (key, value) in d.items()])

Ich habe das Obige geändert, um eine Zeichenfolge zu generieren, die ich einer SQL-Tabellenerstellungsanweisung zuführen könnte.

fieldpairs = ','.join(['{0} {1}'.format(key, value) for (key, value) in HiveTypes.items()])
1
user2941502

Wenn Sie mehr Pythonic sein wollten, können wir das for -Verständnis insgesamt entfernen.

'<br/>'.join(map(':: '.join, mydict.items())
0
Sunny Patel