2015-01-31 4 views
0

의 목록에서 JSON 파일을 직렬화 : 나는 또한 키의 목록을그래서 내가 요소 목록이 목록

elements = [room1, room2, room3] 

를/값은 각 방에가 가지고있는 속성 :

keys = ["level", "finish1", "finish2"] 
values = [["ground", "paint1", "carpet1"],["ground", "paint1", "paint2"], ["second level", "paint1", "paint2"]] 

이다가

{'room1': [{'level': 'ground', 'finish1': 'paint1', 'finish2': 'carpet1'}],'room2': [{'level': 'ground', 'finish1': 'paint1', 'finish2': 'paint2'}],'room3': [{'level': 'second level', 'finish1': 'paint1', 'finish2': 'paint2'}]} 

내가 좌약을 나던 이상한 플랫폼입니다 : 방법은 다음과 같이 구조화 JSON 파일에이 두 개의리스트를 직렬화 오트 사전 그래서 나는 그들을 위해 클래스를 만들었 :

def json_list(keys,values): 
lst = [] 
for pn, dn in zip(values, keys): 
    d = {} 
    d[dn]=pn 
    lst.append(d) 
return json.dumps(lst) 

하지만이 코드 desnt : 내가 나를 두 개의 병렬 목록에서 기본 JSON 코드를 만들 수있는 것입니다 코드의 peiece을 발견 한 후

class collection(): 
def __init__(self,name,key,value): 
    self.name = name 
    self.dict = {} 
    self.dict[key] = value 
def __str__(self): 
    x = str(self.name) + " collection" 
    for key,value in self.dict.iteritems(): 
     x = x + '\n'+ ' %s= %s ' % (key, value) 
    return x 

내게 {room1 : [{... structure

어떤 아이디어라도 좋을 것입니다. 이 소프트웨어는 IronPython2.7을 기반으로합니다.

좋습니다. 나는 코멘트로부터 큰 피드백을 얻었다. 나는 내가 설명하지 못한 하나 이상의 변형을 가지고있다. 때로는 단일 요소 유형 (실, 열 등) 이상을 혼합하려고 시도 할 때 동일한 양의 속성을 갖지 못할 수도 있습니다. 예를 들어, 방은 (레벨, 마감 및 마감)을 가질 수 있지만 기둥은 두께와 재질 만 가질 수 있습니다. 나는 그것이 작동되도록 아래의 정의를 수정해야하는 방법

keys = [[thickness, material],[level,finish,finish]] 
values = [[100,paint],[ground,paint,paint]] 
elements = [column,room] 

: 내가 보관하면 모든 키 병렬 목록에 조직/값은 아래의 정의를 수정하는 것이 가능하다? 다시 json 파일을 내보내려고합니다. 내가 파이썬도 사전없이 작동하는 방법을 모르는

+2

* "사전을 지원하지 않습니다"*는 무엇을 의미합니까? 'collection' *은 사전을 사용하여 구현됩니다 *. – jonrsharpe

+0

글쎄요, 함수 밖에서 사전을 만들면 오류가 발생합니다. 그래서 json_list 함수 안에서 d = {}를 사용할 수 있지만 그것의 외부에는 사용할 수 없습니다. – konrad

+0

'd = dict()'를 밖에하면 어떻게됩니까? – L3viathan

답변

1

, 그래서 그냥이를 테스트 해하고 당신을 보여줍니다 나에게 오류를 말해 :이 작동 할 수

import json 

elements = ['r1','r2','r3'] 
keys = ["level", "finish1", "finish2"] 
values = [["ground", "paint1", "carpet1"],["ground", "paint1", "paint2"], ["second level", "paint1", "paint2"]] 
d = dict() 

for (index, room) in enumerate(elements): 
    d[room] = dict() 
    for (index2, key) in enumerate(keys): 
     d[room][key] = values[index][index2] 

print json.dumps(d) 
+0

큰 감사를드립니다! – konrad

+0

내가 편집 한 게시물을 볼 수 있습니까? 나는 값 목록과 똑같은 구조를 가진 키 목록을 다루지 않을 것이다. 나는 내 물건이 항상 같은 양의 속성을 가지고 있지는 않을 것이므로 하나의 속성 목록을 사용하여 그것들을 모두 정의 할 수는 없다. 이제 각 객체에는 키와 속성 목록이 있으며 길이가 일치합니다. 도울 수 있니? – konrad

+0

예. 그러나 당신은 일관성이 있어야합니다. 편집에 설명 된 것과 같은 구조를 가지고 있다면 코드에서 열 번째 행을 열거 형 (keys [index])에서'for (index2, key) '로 바꿉니다. – L3viathan

1

.

#-*- encoding: utf-8 -*- 
import json 

elements = ["room1", "room2", "room3"] 
keys = ["level", "finish1", "finish2"] 
values = [["ground", "paint1", "carpet1"],["ground", "paint1", "paint2"], ["second level", "paint1", "paint2"]] 

what_i_want = dict((room, [dict(zip(keys, value))]) 
        for room, value in zip(elements, values)) 
print(json.dumps(what_i_want))