Итерация по словарю и размещение данных в таблице PyQt5 - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть словарь со следующей структурой.

 self.data = [{'username':'Homer', 'address':'11.11.111.111'}, {'username':'Bart', 'address':'22.22.222.222'}]

Я пытаюсь отобразить эти данные в таблице в PyQt5.Я пытался сделать что-то вроде следующего:

    for rowIndex, username in enumerate(self.data["username"]["address"]):
        itemName = QTableWidgetItem(username["name"])  # fills cell with material name
        itemName.setFlags(QtCore.Qt.ItemIsEnabled)  # makes cell read only
        itemAddress = QTableWidgetItem()  # creates widget for cell
        itemAddress.setData(username["address"])  # fills material amount and makes it editable

        self.tableWidget.setItem(rowIndex, 0, itemName)  # positioning cell
        self.tableWidget.setItem(rowIndex, 1, itemAddress)  # positioning cell

При этом я получаю следующую ошибку:

TypeError: list indices must be integers or slices, not str

Это понятно, потому что это в строковом формате, какМогу ли я отобразить данные, подобные следующей таблице?

|---------------------|------------------|
|      username       |     address      |
|---------------------|------------------|
|     test user       |  11.111.111.111  |
|---------------------|------------------|

Любая помощь будет принята с благодарностью!Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Ключ здесь self.data - это список, а не словарь;поэтому self.data["username"] не так.Вот предлагаемое исправление:

    for rowIndex, record in enumerate(self.data):
        itemName = QTableWidgetItem(record['username'])
        itemAddress = QTableWidgetItem(record['address'])
        # more ...
0 голосов
/ 04 декабря 2018

У вас есть список, а не словарь.[dict, dict, dict] является list из dicts.Это означает, что вы можете получить к нему доступ следующим образом:

self.data[0] # Get the zeroth dict in list

Или выполнить итерацию по нему следующим образом:

new_data = [x[key][sub_key] for x in self.data] # All must be dict-like in this list

Или что-то еще, что может сделать list s, но не dict s.

Ошибка:

enumerate(self.data["username"]["address"])

В частности: ["username"], когда ожидается int для доступа к list с []

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...