Как хранить словарь Python с помощью QSettings

Код ниже хранит Python data использование словаря QSettings объект. После прочтения словарь содержит все ключи QString вот так:

{PyQt4.QtCore.QString(u'one'): 1, PyQt4.QtCore.QString(u'two'): 2}

Интересно, можно ли было бы читать словарь с помощью обычных строковых ключей, например так:

{'one': 1, 'two': 2}

Код:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

settings = QtCore.QSettings('apps', 'settings')

data = {'one': 1, 'two': 2}

settings.setValue('data', data)

data = settings.value('data').toPyObject()
print data

2 ответа

Решение
  • python2

Непосредственно невозможно, вы должны конвертировать их в обычный словарь.

d = {}
for k, v in data.items():
    d[str(k)] = v

Полный код:

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

settings = QtCore.QSettings('apps', 'settings')

data = {'one': 1, 'two': 2}

settings.setValue('data', data)

data = settings.value('data').toPyObject()
d = {}
for k, v in data.items():
    d[str(k)] = v

print(d)

выход:

{'two': 2, 'one': 1}
  • python3

Эта проблема не существует, так как он возвращает вам обычный словарь, больше нет необходимости преобразовывать его с помощью toPyObject().

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

settings = QtCore.QSettings('apps', 'settings')

data = {'one': 1, 'two': 2}

settings.setValue('data', data)

data = settings.value('data')
print(data)

выход:

 {'one': 1, 'two': 2}
original = {PyQt4.QtCore.QString(u'one'): 1, PyQt4.QtCore.QString(u'two'): 2}
converted = {str(k): val for k, v in original.items()}
Другие вопросы по тегам