我有一个json输出,它是一个字典的形式。迭代它时,我没有得到值。我在这里缺少什么?
以下是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'])
不确定我为什么会输出空白。
答案 0 :(得分:3)
尝试这样的递归函数:
def walkdict(data):
for k, v in data.items():
if isinstance(v, dict):
walkdict(v)
else:
print("{0} : {1}".format(k, v))
答案 1 :(得分:1)
目前还不清楚你想要什么"迭代",特别是因为你削减了数据并且没有真正指定你想要的输出。
所以这是基于添加更多样本数据的猜测:
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']
通过将for
循环置于所谓的list comprehension内,您可以更简洁地获得相同的结果(可读性有所损失):
ids = [item['Data']['id'] for item in data['level1']['level2']]
答案 2 :(得分:0)
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['level1']['level2']:
d.append(x['Data']['id'])
>>> d
['220']
答案 3 :(得分:0)
for k, v in data.items():
p = v.get('level2')
if p:
print p['Data']['id']
也许。