2017-11-21 1 views
1

행 [0], 행 [1], 행 [2]가 아래 출력으로 구성되며 같은 순서로 나오는 행에서 빠져 나오는 것을 고려하십시오. 다음과 같이 :파이썬을 사용하여 mysql 행 fetchall에서 여러 값을 가진 중첩 사전 만들기

'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] 값과 함께 인쇄되는 고유 한 테스트 케이스 이름이 필요하다.

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

pp(d) 
: 위와 그래서 나중에 나중에 내가 가장 높은 행과 이름 테스트 케이스 [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}....} 

위 코드를 시도했지만 위의 요구 사항을 추가하지 않는 새 파일 이름으로 만 업데이트했습니다.

+0

https://stackoverflow.com/help/how-to-ask –

+0

그리고 이것을 달성하기 위해 무엇을 시도 했습니까? – roganjosh

+0

내 코드를 추가했습니다 – vinay

답변

1

추가 작업은 목록 작업입니다. 귀하의 예제 데이터를 기반으로, 당신이 별개의 Z의 주어진 x의 예상 나타납니다

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

을하지만 if이 일반적인 패턴이 collections에서 해결 :

from collections import defaultdict 

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

값 'y'에 따라 'd'를 정렬하는 방법 – vinay

+0

dict은 정렬되는 것에 대한 약속을하지 않습니다. 목록과 같은 정렬 가능한 데이터 구조가 필요합니다. 'lst = []'로 초기화하고'd [x] [z] = y'를 지정한 후에'lst.append ((y, x, z))'(또는 튜플 y, z, x if 그게 당신의 질문이 묻는 것입니다). 그런 다음'sorted (lst)'는 원하는 결과를 제공합니다. 보기 좋게하려면'pprint.pprint (sorted (lst))'를 사용하십시오. –

관련 문제