2013-08-07 6 views
0

나는 이것에 동그라미 가깝지만 회전하고 있다고 생각한다. JSON에서 가져온 파이썬 사전이 있습니다. 원시 데이터는 여기에 게시하기에는 너무 많습니다. 코드는 원하는대로 작동하고 원하는 것을 인쇄합니다. 단, 사전의 마지막 값만 반환한다는 점이 다릅니다. 모든 값을 반환하고 정확하게 여기에 표시되는 방법을 인쇄하려면 어떻게 수정해야합니까? 궁극적으로이 데이터를 가져 와서 데이터베이스에 하나의 항목으로 추가하려고합니다.파이썬에서 중첩 된 사전 값 추출하기

코드 :

text = json.loads(content) 

a = {} 

def extract(DictIn, Dictout): 
    for key, value in DictIn.iteritems(): 
     if isinstance(value, dict): 
      extract(value, Dictout) 
     elif isinstance(value, list): 
      for i in value: 
       extract(i, Dictout) 
     else: 
      Dictout[key] = value 

extract(text, a) 

for k, v in a.iteritems(): 
    print k, ":", v 

결과는 다음과 같이, 그러나 다른 40 개 정도의 항목이 있어야합니다. 현재 코드는 마지막 항목을 보여줍니다

datetime : 2014-06-10T20:00:00-0600 
date : 2014-06-10 
href : http://xxxxxxxxxxxx.json 
lng : -94.5554 
id : 17551289 
createdAt : 2013-07-30T12:18:56+0100 
city : Kansas City, MO, US 
billing : headline 
totalEntries : 37 
type : Concert 
billingIndex : 1 
status : ok 
perPage : 50 
setlistsHref : xxxxxxxxxxxx:51b7f46f-6c0f-46f2-9496-08c9ec2624d4/setlists.json 
lat : 39.0763 
displayName : Ben Folds 
eventsHref : http://xxxxxxx.08c9ec2624d4/calendar.json 
popularity : 0.0 
uri : xxxxxxxxxxxxxxxxxx 
mbid : xxxxxxxxxxx 
onTourUntil : 2014-06-10 
time : 20:00:00 
page : 1 
+0

? 또는 최상위 수준이 배열 인 경우? – user2357112

+2

나는 json 자체를 살펴볼 것을 제안합니다. DictOut에서 키를 덮어 쓸 가능성이 있습니다. 이는 dict/list json 트리의 'leaves'가 동일한 키 이름을 가지므로 그 리프를 '평평하게'할 때 동일한 키를 가진 이전에 병합 된 리프를 덮어 쓰게됩니다. 그래서 다른 모든 것들을 덮어 썼기 때문에 단지 하나의 엔트리를 얻는 것처럼 보입니다. – dilbert

답변

0

문제는 함께 당신의 Dictout[key] = valuekeysunique

나는 대한의 생각

_d = {1: 'one', 2: 'two'} 

>>> print _d 
{1: 'one', 2: 'two'} 

>>> _d[1] = 'another one' 
>>> print _d 
{1: 'another one', 2: 'two'} 

가정입니다 파이썬 사전에

루프가 overwriting value 인 기존 key인데 마지막으로 입력 한 내용 만 저장되고 있습니다!

이 출력처럼 보일 수 있도록 list of dictionaries처럼 데이터 구조, 뭔가를 변경해보십시오,

json으로의 배열의 배열이 있는지 어떻게됩니까
my_out_list = [{1: 'one', 2: 'two'}, {1: 'another one', 2: 'two'}]