用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获取行数据以及单击单元格获取行数据操作