2015-03-15 2 views
0

Я написал функцию, которая вернет несколько словарей. Например:Как получить значение из вложенного словаря в python?

def func() 
    return C# <---- nested dictionary 

if __name__ == "__main__": 
    ans = func() 
    print ans    

Если я напечатать АНС:

{u'ok': 1.0, u'result': [{u'price': 129.7, u'_id': datetime.datetime(2015, 2, 23, 9, 32)}, {u'price': 129.78, u'_id': datetime.datetime(2015, 2, 23, 9, 33)}, 
print ans.get('_id') 

Если я распечатать это, результат нет. Как я могу получить _id?

+0

ans.get ('result') [0] .get ('_ id')? – eMAD

+0

Я могу получить результат, но только первый .. как получить все результаты? – manChan

+0

'[i ['_ id'] для i в ans ['result']]' –

ответ

2

Вы можете использовать список.

In [19]: ans = {u'ok': 1.0, u'result': [{u'price': 129.7, u'_id': datetime.datetime(2015, 2, 23, 9, 32)}, {u'price': 129.78, u'_id': datetime.datetime(2015, 2, 23, 9, 33)}]} 
In [24]: [i['_id'] for i in ans['result']] 
Out[24]: [datetime.datetime(2015, 2, 23, 9, 32), datetime.datetime(2015, 2, 23, 9, 33)] 
In [25]: [i.get('_id') for i in ans['result']] 
Out[25]: [datetime.datetime(2015, 2, 23, 9, 32), datetime.datetime(2015, 2, 23, 9, 33)] 
0
for i in ans['result']: 
    print i['_id'] 
+0

Это вернет только первый элемент результата '_id' - OP заинтересован в получении всех значений' _id'. – Lix

0

Глядя на свой след, кажется, что с является словарь, содержащий различные другой словарь.

print ans["result"][0]["_id"] 

Должно возвращать требуемое значение.

0

func() на самом деле возвращает вложенный словарь. Посмотрите внимательно на то, что говорит вам ваша печать. Так ans = func() вложенная словарь:

{u'ok': 1.0, u'result': [{u'price': 129.7, u'_id': datetime.datetime(2015, 2, 23, 9, 32)}, {u'price': 129.78, u'_id': datetime.datetime(2015, 2, 23, 9, 33)}, 

Следовательно анс [ «результат»] сам другой ДИКТ, или по-видимому, список, содержащий Dict.

Смежные вопросы