1

我有一个 PyQt4 字符串数组存储在一个变量result中,如下所示:

{
    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 列表?

4

1 回答 1

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包含相同字符串的两个对象总是具有相同的哈希码并且总是比较相等 - 如果不是,那么首先使用QStrings 作为字典键是一个坏主意。)

这假设resultlist您演示的形式的包含字典,例如:

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 数据结构(即将所有QStrings 转换为unicodeor str),然后处理生成的新数据结构。正如您可能已经猜到的那样,您仍然可以通过将转换后的结构存储在另一个变量中来选择保留原始结构。

更新:(根据评论)

如果您的QString对象实际上包含非 ASCII 字符,那么您只使用str()将它们转换为纯 Python 字符串就不走运了;相反,您需要将它们转换为unicode对象:

src = unicode(i[PyQt4.QtCore.QString(u'src')])

如果您需要将其转换为“原始”字节:

src = src.encode('utf_8')  # or use whatever encoding you prefer instead of UTF-8 here
于 2013-09-27T21:59:59.390 回答