Как хранить словарь 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()}