用pyqt5中的表头和每一行构造一个包含多个字典的列表;

Posted

技术标签:

【中文标题】用pyqt5中的表头和每一行构造一个包含多个字典的列表;【英文标题】:construct a list with multiple dictionaries with table header and each row in pyqt5; 【发布时间】:2019-10-17 06:29:09 【问题描述】:

当我将两个 list 转换为 dict 时,我在名为“headers”的列表中获取了列标题名称,并在名为“row data”的列表中获取了每一行数据只获取唯一键值,如何获取所有重复值。

headers=['Filter1', 'Filter2', 'Filter3', 'SchemaName1', 'Filter1', 'Filter2', 'Filter3', 'SchemaName1', 'Filter1', 'Filter2', 'Filter3', 'SchemaName1', 'Filter1', 'Filter2', 'Filter3', 'SchemaName1', 'Filter1', 'Filter2', 'Filter3', 'SchemaName1']
rowdata=['US_CO', 'US_COM', 'US_DO', 'public', 'US_CO', 'US_COM', 'US_DO', 'publicss', '', '', '', '', '', '', '', '', '', '', '', '']
def savedata_click(self):
    headers = []
    rowdata = []
    for row in range(self.table.rowCount()):
        for column in range(self.table.columnCount()):
            item = self.table.item(row, column)
            if item is not None:
                rowdata.append(item.text())
            else:
                rowdata.append('')
            header = self.table.horizontalHeaderItem(column)
            if header is not None:
                headers.append(header.text())
            else:
                headers.append("Column " + str(column))
     res= dict(zip(headers,rowdata))
     print(res)

output:'Filter1':  '', 'Filter2':  '', 'Filter3':  '', 'SchemaName1':  ''
expected:['Filter1':  'US_CO', 'Filter2':  'US_COM', 'Filter3':  'US_DO', 'SchemaName1':  'public','Filter1':  'US_CO', 'Filter2':  'US_COM', 'Filter3':  'US_DO', 'SchemaName1':  'publicss','Filter1':  '', 'Filter2':  '', 'Filter3':  '', 'SchemaName1':  '','Filter1':  '', 'Filter2':  '', 'Filter3':  '', 'SchemaName1':  '']

【问题讨论】:

@shaikmoeed.. Header 是表列名兄弟。如何获得与每一行的键相同的标题。 查看答案 【参考方案1】:

试试这个,

headers=['Filter1', 'Filter2', 'Filter3', 'SchemaName1', 'Filter1', 'Filter2', 'Filter3', 'SchemaName1', 'Filter1', 'Filter2', 'Filter3', 'SchemaName1', 'Filter1', 'Filter2', 'Filter3', 'SchemaName1', 'Filter1', 'Filter2', 'Filter3', 'SchemaName1']
rowdata=['US_CO', 'US_COM', 'US_DO', 'public', 'US_CO', 'US_COM', 'US_DO', 'publicss', '', '', '', '', '', '', '', '', '', '', '', '']

>>> final_list = []      
>>> header_length = 4 # Number of columns
>>> _splitted_dict_list = [k:v for k,v in zip(headers, rowdata)]           
>>> for v in range(0, len(_splitted_dict_list), header_length):
    final_list.append(nk:nv for nested_dict in _splitted_dict_list[v:v+4] for nk,nv in nested_dict.items())

输出:

>>> final_list

['Filter1': 'US_CO','Filter2': 'US_COM','Filter3': 'US_DO','SchemaName1': 'public',
 'Filter1': 'US_CO','Filter2': 'US_COM','Filter3': 'US_DO','SchemaName1': 'publicss',
 'Filter1': '', 'Filter2': '', 'Filter3': '', 'SchemaName1': '',
 'Filter1': '', 'Filter2': '', 'Filter3': '', 'SchemaName1': '',
 'Filter1': '', 'Filter2': '', 'Filter3': '', 'SchemaName1': '']

【讨论】:

以上是关于用pyqt5中的表头和每一行构造一个包含多个字典的列表;的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5单击QTableView垂直表头verticalHeader获取行数据以及单击单元格获取行数据操作

PyQt5单击QTableView垂直表头verticalHeader获取行数据以及单击单元格获取行数据操作

PyQt5单击QTableView垂直表头verticalHeader获取行数据以及单击单元格获取行数据操作

如何将n个excel表格合并在同一份excel中的同一表格中,他们的表头都一样

多个相同表头的excel表格如何合并成一个

Python - BS4 - 仅使用表头+保存为字典从维基百科表中提取子表