Python 如何将MySQL查询结果集中的数据添加到字典列表中?
我想从执行MySQL查询获得的结果集中创建一个字典列表 以下是从执行MySQL查询的结果中获得的列表形式的行结果集-Python 如何将MySQL查询结果集中的数据添加到字典列表中?,python,python-3.x,Python,Python 3.x,我想从执行MySQL查询获得的结果集中创建一个字典列表 以下是从执行MySQL查询的结果中获得的列表形式的行结果集- ip ver software status count 198.168.1.1 1.1 A fail 5 198.168.1.1 1.1 A pass 10 198.168.1.1 1.1
ip ver software status count
198.168.1.1 1.1 A fail 5
198.168.1.1 1.1 A pass 10
198.168.1.1 1.1 B fail 15
198.168.1.1 1.1 B pass 20
198.168.1.2 1.1 A pass 25
这就是我试过的-
data_dict = {}
data_list = []
for row in rows:
data_dict['ip'] = row[0]
data_dict['version'] = row[1]
data_dict['software'] = row[2]
data_dict['pass'] = 0 # may be a case that software never passed. Hence default set to 0
data_dict['fail'] = 0 # may be a case that software never failed. Hence default set to 0
if row[3] == 'pass':
data_dict['pass'] = row[4]
if row[3] == 'fail':
data_dict['fail'] = row[4]
data_list.append(data_dict)
data_dict = {}
for item in data_list:
print(item)
实际结果如下:-
{'ip': '198.168.1.1', 'version': '1.1', 'software': 'A', 'pass': 0, 'fail': 5}
{'ip': '198.168.1.1', 'version': '1.1', 'software': 'A', 'pass': 10, 'fail': 0}
{'ip': '198.168.1.1', 'version': '1.1', 'software': 'B', 'pass': 0, 'fail': 15}
{'ip': '198.168.1.1', 'version': '1.1', 'software': 'B', 'pass': 20, 'fail': 0}
{'ip': '198.168.1.2', 'version': '1.1', 'software': 'A', 'pass': 25, 'fail': 0}
预期结果-
{'ip': '198.168.1.1', 'version': '1.1', 'software': 'A', 'pass': 10, 'fail': 5}
{'ip': '198.168.1.1', 'version': '1.1', 'software': 'B', 'pass': 20, 'fail': 15}
{'ip': '198.168.1.2', 'version': '1.1', 'software': 'A', 'pass': 25, 'fail': 0}
任何帮助都将不胜感激。谢谢 为了不为您编写代码,您需要执行如下检查: 行=[[198.168.1.1,1.1,A,fail,5], [198.168.1.1,1.1,A,通过,10], [198.168.1.1,1.1,B,失败,15], [198.168.1.1,1.1,B,通过,20], [198.168.1.2,1.1,A,通过,25]] dict_list=[] 数据_dict={} 对于行中的行: 对于目录列表中的元素: 如果elem['software']==行[2]: 打印已存在 数据目录['ip']=行[0] 数据目录['version']=行[1] 数据dict[“软件”]=第[2]行 dict_list.appenddata_dict
然后根据字典是否存在来更新它的key,val对。以下是完整的解决方案:
rows = [
('198.168.1.1', '1.1', 'A', 'fail', 5),
('198.168.1.1', '1.1', 'A', 'pass', 10),
('198.168.1.1', '1.1', 'B', 'fail', 15),
('198.168.1.1', '1.1', 'B', 'pass', 20),
('198.168.1.2', '1.1', 'A', 'pass', 25),
]
data = {}
for row in rows:
key = (row[0], row[1], row[2])
if key not in data:
data[key] = {
'ip': row[0],
'version': row[1],
'software': row[2],
'pass': 0,
'fail': 0,
}
if row[3] == 'pass':
data[key]['pass'] = row[4]
else:
data[key]['fail'] = row[4]
data_list = list(data.values())
不是将所有内容都附加到列表中,而是使用字典来防止重复,并最终根据列表的值构造列表。此解决方案是不正确的,因为您在循环迭代之间重用数据,并且由于内部循环,它的复杂性为^2