#python #pyqt5
#python #pyqt5
Вопрос:
Когда я вставляю словарь, подобный {"B": 1, "A": 2, "D": 3, "C": 4}
в выпадающий список PyQt5, dict будет отсортирован в алфавитном порядке по ключам. Как я могу предотвратить это и сохранить исходный порядок?
Пример:
dictionary = {"B": 1, "A": 2, "D": 3, "C": 4}
self.comboBox.addItem("Test", dictionary)
print(dictionary)
print(self.comboBox.itemData(0))
Это выводит:
{'B': 1, 'A': 2, 'D': 3, 'C': 4}
{'A': 2, 'B': 1, 'C': 4, 'D': 3}
Комментарии:
1. использовать
OrderedDict
dict?2. Какую версию Python вы используете?
3. Я использую Python 3.7
Ответ №1:
Похоже, что это ошибка (или, по крайней мере, неожиданное поведение), вызванная тем, как PyQt5 (и PySide2) хранит словари, обходным путем является использование OrderedDict:
import collections
dictionary = {"B": 1, "A": 2, "D": 3, "C": 4}
print(dictionary)
self.comboBox = QtWidgets.QComboBox()
self.comboBox.addItem("Test", collections.OrderedDict(dictionary))
d = dict(self.comboBox.itemData(0))
print(d)
Вывод:
{'B': 1, 'A': 2, 'D': 3, 'C': 4}
{'B': 1, 'A': 2, 'D': 3, 'C': 4}