将PyQt4 QString转换为Python lis

2024-05-09 22:37:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在变量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列表?


Tags: 字符串insrccomhttp数组resultalt
1条回答
网友
1楼 · 发布于 2024-05-09 22:37:58

尝试:

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转换为unicodestr),然后再处理生成的新数据结构。您仍然可以选择保留原始结构,只需将转换后的结构存储在另一个变量中,正如您可能已经猜到的那样。

更新:(根据注释)

如果您的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

相关问题 更多 >