2017-12-06 5 views
0

dict에서 데이터를 구문 분석하려고합니다. 다음은 사전입니다.파이썬에서 중첩 된 dict에서 데이터 가져 오기

data = {'specs': u'{"software_addon": None, 
"checkout_os": 
    {12L: {"status": 3L, "units": 1L, "label": "Disk1", "orderproduct_id": 22L, "slider_id": 788L, "unitPrice": 0.3}, 
    15L: {"status": 3L, "units": 60L, "label": None, "orderproduct_id": 22L, "slider_id": 787L, "unitPrice": 0.3}}, 
"checkout_op": {"pk": 11L, "total_price": 90.3, "discount_price": 80.3, "monthly_fee": 80.3}, 
"virtualmachine_vm": {"pk": 15L, "diskGB": 101L, "memoy_size": 3221225472L, "num_cpu": 2L}, 
"checkout_o": {"pk": 74L, "grand_total": 180.3, "discount_price": 180.3} 
}', 
'id': 411L, 'name': u'name-7xccf'} 

데이터를 검색하려고 할 때 오류가 발생합니다.

print data['specs']['virtualmachine_virtualmachines']['pk'] 

오류 : 문자열 인덱스는 내가 그것을 시도하고 (심지어 이스트 우드의 제안에) 당신과 같은 오류가 발생했습니다

+0

인쇄 데이터 [ '스펙'] [ 'virtualmachine_vm'] [ 'PK'] – Eastwood

+1

데이터 [ "사양"] 귀하의 예제에서 문자열 인을 열심히가 예상하는 data [ 'specs'] [2]와 같이 int에 의해 인덱싱 될 문자열입니다. 당신은 아마도 일부 따옴표를 제거해야합니다. – meggar

답변

1

str에하지, 정수이어야하지만은 제거 후 작업 u' 및 해당 닫는 따옴표. 당연히 전체 주소록에 대해이 u 연산자/수정자를 사용할 수 없습니다.

그래서

data = {'specs': {"software_addon": None, "checkout_os": {12L: {"status": 3L, "units": 1L, "label": "Disk1", "orderproduct_id": 22L, "slider_id": 788L, "unitPrice": 0.3}, 15L: {"status": 3L, "units": 60L, "label": None, "orderproduct_id": 22L, "slider_id": 787L, "unitPrice": 0.3}}, "checkout_op": {"pk": 11L, "total_price": 90.3, "discount_price": 80.3, "monthly_fee": 80.3}, "virtualmachine_vm": {"pk": 15L, "diskGB": 101L, "memory_size": 3221225472L, "num_cpu": 2L}, "checkout_o": {"pk": 74L, "grand_total": 180.3, "discount_price": 180.3} }, 'id': 411L, 'name': u'name-7xccf'} 
print data['specs']['virtualmachine_vm']['pk'] 

+0

여전히 같은 오류가 발생합니다. 다음과 같이 인쇄해도 정상적으로 작동합니다. 데이터 인쇄 [ '이름'] – Eastwood

+0

이상합니다. 내가 게시 한 코드를 복사/붙여 넣기 했습니까? 여기 파이썬 2.7.5를 사용하고 불평하지 않고 대답 (15)을 인쇄했습니다. – Ronald

+0

기술적으로 당신 말이 맞습니다.이 코드는 명시 적으로이 사전을 사용하면 작동합니다. 내 문제는 DICT를 통해 이루어졌습니다. 나는 그것이 일을 didnt하는 여분의 따옴표를 제거했다. 나는 완전한 dict에 가동을하고 있었다. 하지만 그것은 'specs'를 python dict로 변환 한 다음 'data'dict에 추가하면 해결됩니다. 이제 작동합니다. – Eastwood

관련 문제