我有一个存储在变量result
中的PyQt4字符串数组,如下所示:
{
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')
}
我想将其转换为图像src和alt标签的python。我正在尝试使用此命令:
for i in result:
src = str(i['src'])
alt = str(i['alt'])
但是我收到以下错误:
Traceback (most recent call last):
File "ghosttest.py", line 32, in <module>
print i['src']
KeyError: 'src'
如何将其转换为常规python列表?
答案 0 :(得分:4)
尝试:
for i in result:
src = str(i[PyQt4.QtCore.QString(u'src')])
alt = str(i[PyQt4.QtCore.QString(u'alt')])
这是因为我们的dict键不是Python字符串而是QString
个对象。
(注意:我假设包含相同字符串的两个QString
对象总是具有相同的哈希码并且总是比较相等 - 如果不是,那么使用QString
作为字典键是个坏主意首先。)
这假设result
是包含您所演示形式的词典的list
,例如:
result = [
{
PyQt4.QtCore.QString(u'src'): PyQt4.QtCore.QString(u'http://...'),
PyQt4.QtCore.QString(u'alt'): PyQt4.QtCore.QString(u'bla'),
},
{
PyQt4.QtCore.QString(u'src'): PyQt4.QtCore.QString(u'http://...'),
PyQt4.QtCore.QString(u'alt'): PyQt4.QtCore.QString(u'bla'),
},
....
]
注意:强>
如果您需要对该数据进行大量处理,您可能希望将整个数据列表转换为纯Python数据结构(即将所有QString
转换为unicode
或{{ 1}})然后继续工作,产生新的数据结构。您仍然可以选择保留原始结构,只需将转换后的结构存储在另一个变量中,就像您猜测的那样。
更新:(根据评论)
如果您的str
对象实际上包含非ASCII字符,那么仅使用QString
将它们转换为纯Python字符串就不行了;相反,您需要将它们转换为str()
个对象:
unicode
如果您需要将其转换为“原始”字节:
src = unicode(i[PyQt4.QtCore.QString(u'src')])