将PyQt4 QString转换为Python列表

时间:2013-09-27 21:41:57

标签: python pyqt4

我有一个存储在变量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列表?

1 个答案:

答案 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')])