2016-08-03 20 views
0

Ich habe ein Wörterbuch wie folgt aus:Der Versuch, alle Werte in einem Wörterbuch konvertieren durch Wörterbuch Verständnis in int

{1: 'rattle', 2: '204', 3: 'three', 4: 404, 5: '104', 6: 'pythonic'} 

Und ich möchte alle Werte konvertieren Wörterbuch Verständnis auf Integer, wo immer möglich, durch. Deshalb möchte ich dies:

{1: 'rattle', 2: 204, 3: 'three', 4: 404, 5: 104, 6: 'pythonic'} 

Ich habe versucht:

{i: int(m[i]) for i in m if type(m[i]) == str and m[i].isdigit()} 

aber es enthält nur die Werte, die Zeichenfolge sind und umgesetzt werden können, um integer. Ich habe auch versucht, die ganze Sache in einen Versuch zu fangen, aber es funktioniert nicht

Ich weiß, dass dies durch eine einfache for-Schleife getan werden kann, aber gibt es noch einen anderen Weg?

Antwort

2

Durch Hinzufügen einer if an das Ende Ihrer Schleife, sind Sie Filterung, Begrenzung Ihrer Ausgabe auf Schlüssel-Wert-Paare, wo der Wert eine Zeichenfolge und besteht aus Ziffern.

Verwenden Sie stattdessen einen bedingten Ausdruck im Wertausdruck; auf diese Weise Sie alle Schlüssel-Wert-Paare halten aber nur int() auf Werte gelten, wenn diese Angelegenheiten und der Rest sind unverändert:

{k: int(v) if isinstance(v, str) and v.isdigit() else v for k, v in m.items()} 

Anstatt iterieren nur über m (und nur die Schlüssel), benutzte ich dict.items() um den Schlüssel und den entsprechenden Wert in einem Schritt zu erhalten.

1
{k: int(v) if str(v).isdigit() else v for k, v in m.items()}