使用 python 从 mysql 行 fetchall 创建具有多个值的嵌套字典

creating nested dictionary with multiple values from a mysql row fetchall using python

考虑一下我要从行[0]、行[1]、行[2] 由以下输出组成的行中取出,并且顺序如下:

'Testcase2', 37L, 'hydra.c
'Testcase2', 100L,'vendor.c
'Testcase7', 34L, 'template.c
'Testcase3', 88L, 'hydra.c
'Testcase3', 80L, 'vendor.c
'Testcase6', 81L, 'template.c
'Testcase1', 1L, 'hydra.c
'Testcase4', 89L, 'vendor.c
'Testcase8', 41L, 'template.c
'Testcase5', 83L, 'vendor.c
'Testcase4', 98L, 'template.c

我需要一个唯一的测试用例名称与最大行 [1] 值一起打印,所以我想创建具有多个值的字典。

{'Testcase1': {'hydra.c': 1},
 'Testcase2':{'hydra.c':37,'vendor.c':100 },
 'Testcase3':{'hydra.c':1,'vendor.c':80}
 'Testcase4':{'vendor.c':89,'template.c':98},
 'Testcase5':{'vendor.c':83}
 'Testcase6':{'template.c':34}....} 

如上创建具有多个值的字典,请帮助我,以便稍后我将对嵌套字典进行排序,以便稍后我将打印具有最高行 [1] 值的测试用例名称:

from pprint import pprint as pp
d={}
for x,y,z in row:
    d.setdefault(x,{z:[]})
    d[x][z].append(y)

pp(d)

我试过上面的代码,但它只更新了新的文件名,它没有按照上面的要求附加。

追加是一个列表操作。根据您的示例数据,您似乎预计给定 x:

的不同 z
    for x, y, z in row:
        if x not in d:
            d[x] = {}
        d[x][z] = y

但是 ifcollections 中提到的常见模式:

from collections import defaultdict

    d = defaultdict(dict)
    for x, y, z in row:
        d[x][z] = y