2015-10-16 142 views
0

一個多層次的字典我有一個JSON輸出這是一本字典的形式。雖然迭代它我沒有得到值。我在這裏錯過了什麼?如何遍歷在Python

下面是dict類型的JSON輸出樣本。你可以看到有兩個級別。所以一旦我達到'level2',然後我需要遍歷這是我已經削減了數據到一個項目是不是這裏顯示的一個新的水平。

data = {u'level1': 
      {u'level2': [{u'Data': 
          {u'id': u'220', 
          u'byte': u'13', 
          u'time': u'1444', 
          u'ch': u'38'}}]}} 

我想什麼是如下:

d=[] 
for x in data['level2']: 
    d.append(x['Data']['id']) 

不知道爲什麼我收到空白輸出。

+1

'數據'沒有密鑰'level2'。它具有'level1',但它具有一個本身包含一個鍵'level2'的字典的值。 – TigerhawkT3

+0

另外,你的字面'data'是不完整的,缺少了幾個'}'和')'。 – TigerhawkT3

+0

嘗試'用於數據x [ '(第一級)'] [ '級別2']:' – aayush

回答

1

目前還不清楚你想要什麼,以「迭代」,特別是因爲你下調的數據,並沒有真正說明你想要的輸出。

因此,這裏的基礎上,加入多一點樣本數據的猜測:通過把內部被稱爲一個的for循環

data = {u'level1': 
      {u'level2': [{u'Data': 
          {u'id': u'220', 
          u'byte': u'13', 
          u'time': u'1444', 
          u'ch': u'38'}}, 
         {u'Data': 
          {u'id': u'440', 
          u'byte': u'26', 
          u'time': u'2888', 
          u'ch': u'76'}}]}} 

ids = [] 
for item in data['level1']['level2']: 
    ids.append(item['Data']['id']) 

print(ids) # -> [u'220', u'440'] 

你可以更簡潔達到同樣的效果(與可讀性的一些損失) list comprehension

ids = [item['Data']['id'] for item in data['level1']['level2']] 
0

值爲級別2列表。所以,你必須遍歷這樣的:

data={u'level1': {u'level2': [{u'Data': {u'id': u'220', u'byte': u'13', u'time': u'1444', u'ch': u'38'}}]}} 
d = [] 
for x in data['level1']['level2']: 
    d.append(x['Data']['id']) 

>>> d 
['220'] 
0
for k, v in data.items(): 
    p = v.get('level2') 
    if p: 
     print p['Data']['id'] 

可能。

3

嘗試遞歸函數是這樣的:

def walkdict(data): 
    for k, v in data.items(): 
     if isinstance(v, dict): 
      walkdict(v) 
     else: 
      print("{0} : {1}".format(k, v))