2016-08-10 2 views
0

나는 기록의 모음을 저장 한 여러 사전의 경우 : 내가 처음 사전의 ID를 일치와 새에 저장할 모든 레코드를 검색 할일치 값은

d1 = {'id':['223','444'],'value_1':['v1','x1']} 
d2 = {'id': ['223','666'],'value_2':['v2','x2']} 
d3 = {'id':['223','444'], 'value_3':['v3','x3']} 

모든 필드, '값 1', '값 2'와 'VALUE_3'

d_4 = {'id':[],'value_1':[],'value_2':[],'value_3':[]} 

기록 중 하나가 내가 그 분야에서 '----'를 추가 할 모든 사전에 존재하지 않는 경우

. 내가 그렇게 할이 코드를 작성

d_4 

{'id': ['223', '444'], 
'value_1': ['v1', 'x1'], 
'value_2': ['v2', '----'], 
'value_3': ['x3', 'x3']} 

:

for i,id_d1 in enumerate(d1['id']): 
    d_4['id'].append(id_d1) 
    d_4['value_1'].append(d1['value_1'][i]) 
    if id_d1 in d2['id']: 
     for j,id_d2 in enumerate(d2['id']): 
      if id_d1==id_d2: 
       d_4['value_2'].append(d2['value_2'][j]) 
    else: 
     d_4['value_2'].append('----') 
    if id_d1 in d3['id']: 

     for k,id_d3 in enumerate(d3['id']): 
      if id_d1==id_d3: 
       d_4['value_3'].append(d3['value_3'][j]) 
    else: 
     d_4['value_3'].append('----') 

을하지만 안 좋은 방법처럼 보인다 않는 출력 그래서,이 경우 일 것이다.

+1

나는이 권리가 귀하에게 r 레코드는 실제로 id ** 멤버 인 ** id와 ** 값의 멤버 인 value_x 멤버를 가지며 각 값은 id에 해당한다. 즉,'d1 [ 'value_1'] [0]'은'd1 [ 'id'] [0]'에 해당하는 값인가? –

+0

"레코드 중 하나가 * 모든 사전에 존재하지 않으면 해당 필드에 '----'을 추가하겠다고 말하기 때문에 'd1' ids가 참조인지 여부는 분명하지 않습니다. 'd3 = { 'id': [ '223', '555'], 'value_3': [ 'v3', 'x3']}''---- '' 'd_4'에'value_3','value_1'에 대해서도? – zezollo

+0

@MathieuBridon 네, 맞습니다. –

답변

1

어쩌면 이것은 당신을 도울 것입니다 :

코드 :

import sys 
print(sys.version) 

# you should use an iterable for your data 
in_list = [{'id':['223','444'],'value_1':['v1','x1']}, 
    {'id': ['223','666'],'value_2':['v2','x2']}, 
    {'id':['223','444'], 'value_3':['v3','x3']} 
    ] 

print "Input:\n", in_list 

# note that dictionaries are not ordered 
out_dict = {} 
out_dict["id"] = in_list[0]["id"] 
out_dict["value_1"] = in_list[0]["value_1"] 

for i,d in enumerate(in_list[1:]): 
    values = [v[1] for v in d.items() if "value" in v[0]][0] 
    #print(i, d, values) 
    if in_list[i+1]["id"] != in_list[0]["id"]: 
     values[1] = "---" 
    out_dict["value_{}".format(i+2)] = values 

print "Output:\n", out_dict 

아웃 :

2.7.2 (default, Aug 31 2011, 14:05:14) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build)] 
Input: 
[{'value_1': ['v1', 'x1'], 'id': ['223', '444']}, {'id': ['223', '666'], 'value_2': ['v2', 'x2']}, {'id': ['223', '444'], 'value_3': ['v3', 'x3']}] 
Output: 
{'value_1': ['v1', 'x1'], 'id': ['223', '444'], 'value_3': ['v3', 'x3'], 'value_2': ['v2', '---']} 


업데이트 : 오류를 수정 출력 에게 갱신 2가 필요 얻을 : 나는 + 1

오프셋
+0

변수를 반복 할 필요가 있다면 : >>> d1 = { "key": None} >>> i = 1 >>> print (지역) [ "d"+ str (i)] [ "key"]) 없음' – handle