Konvertieren von PyQt4 QString Python-Liste
Ich habe ein array von PyQt4 Zeichenfolgen in einer Variablen gespeichert result
sieht wie folgt aus:
{
PyQt4.QtCore.QString(u'src'): PyQt4.QtCore.QString(u'http://assets.macys.com/navapp/img/misc/close_button.gif'),
PyQt4.QtCore.QString(u'alt'): PyQt4.QtCore.QString(u'Close')
}
Dass ich konvertieren in ein python-image src-und alt-tags. Ich bin versucht, um diesen Befehl zu verwenden:
for i in result:
src = str(i['src'])
alt = str(i['alt'])
Aber ich bekomme die folgende Fehlermeldung:
Traceback (most recent call last):
File "ghosttest.py", line 32, in <module>
print i['src']
KeyError: 'src'
Wie konvertiere ich diese zu einer regulären python-Liste?
- was ist
i
enthalten soll? - ich wird Durchlaufen 'Ergebnis', die eine Reihe von code in Klammern oben.
- OK, das habe ich gemerkt... nachdem er verwirrt für eine Weile... das nächste mal versuchen, um die Informationen in deiner Frage weniger zweideutig 🙂 wie auch immer, dann meine Antwort hat die Lösung für Ihr problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
es ist, weil unsere dict keys sind auch nicht-Python-strings, sondern
QString
Objekte.(HINWEIS: ich gehe davon zwei
QString
Objekte mit dem gleichen string immer den gleichen hash-code und vergleichen Sie immer gleich—wenn nicht, ist es eine schlechte Idee, verwenden SieQString
s als dictionary-Schlüssel in den ersten Platz.)Dies ist unter der Annahme
result
ist einlist
mit Wörterbüchern in der form, die Sie gezeigt, z.B.:HINWEIS:
Wenn Sie arbeiten müssen, dass Daten, eine Menge, möchten Sie vielleicht zu konvertieren, wird die gesamte Liste der Daten zu einem pure-Python-Datenstruktur (d.h. konvertieren alle
QString
s zuunicode
oderstr
) und dann kont er die daraus resultierenden neuen Daten-Struktur. Sie können noch wählen, um die original-einer von nur speichern die konvertierte Struktur in eine andere variable, wie Sie vielleicht erraten haben.UPDATE: (per Kommentar),
falls Ihr
QString
Objekte tatsächlich enthalten nicht-ASCII-Zeichen, Sie sind aus Glück nur mitstr()
zu konvertieren plain Python-strings; stattdessen, Sie brauchen, um Sie zu konvertierenunicode
Objekte:wenn Sie dann brauchen, um zu konvertieren, dass in "raw" bytes:
PyQt4 not defined
KeyError: "PyQt4.QtCore.QString(u'src')"
import PyQt4
in diesem Fall. (oder noch besser:from PyQt4.QtCore import QString
und verwenden Sie dieQString(...)
kürzere form statt)result
ist einlist
und sieht genauso aus wie das!alt = str(i[PyQt4.QtCore.QString(u'alt')])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 18: ordinal not in range(128)
unicode(...)
stattstr(...)
, und wenn Sie müssen die bytes dann nur.encode('utf_8')
von derunicode
Objekt.