Python 如何将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

我想从执行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     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