2016-08-13 62 views
0

我有一些數據存儲在Django'Food'模型的'營養素'JSONField中。如何訪問列表中的字典型項目(python或可能是javascript)

底部的一些樣本數據結構。

該數據是Food.nutrients,但我不知道如何/最佳方式訪問營養素列表中的特定項目 - 其結構類似[{dict type item},{dict type item} ... ]。

每個項目是一個帶有'name'鍵和'nutrient_id'鍵的字典,我可以幫我挑選出我想要的物品。然後從項目詞典中,我想獲得關鍵'值'的值(我沒有命名關鍵'值')。

[{u'dp': 1, 
    u'group': u'Minerals', 
    u'measures': [], 
    u'name': u'Manganese, Mn', 
    u'nutrient_id': 315, 
    u'se': u'', 
    u'sourcecode': [1], 
    u'unit': u'mg', 
    u'value': 0.094}, 
{u'dp': 1, 
    u'group': u'Minerals', 
    u'measures': [], 
    u'name': u'Selenium, Se', 
    u'nutrient_id': 317, 
    u'se': u'', 
    u'sourcecode': [1], 
    u'unit': u'\xb5g', 
    u'value': 0.4}, 
{u'dp': 1, 
    u'group': u'Vitamins', 
    u'measures': [], 
    u'name': u'Vitamin C, total ascorbic acid', 
    u'nutrient_id': 401, 
    u'se': u'', 
    u'sourcecode': [1], 
    u'unit': u'mg', 
    u'value': 4.0}] 

回答

3

讓我們假設,你有在nutrients字典的列表。現在您可以過濾列表以查找與具有特定值的特定鍵相匹配的項目。例如,要找到有「錳,錳」 name字典,你可以這樣做:

matches = filter(lambda n: n.get('name') == 'Manganese, Mn', nutrients) 

現在matches列表應包含其中包含「錳,錳」在name關鍵的營養素。

您可以訪問第一個營養使用指數 - matches[0]。現在你可以訪問其他密鑰,如matches[0].get('value')

+0

太棒了 - 非常感謝。作品,這是一個相當小的oneliner – amchugh89

+1

我意識到這是相當於[n爲n的營養素n.get('name')=='錳,錳']這是順便我喜歡的方式,但我的速度測試它,這個[n ..]「pythonic」方式實際上在這種情況下也快一點 – amchugh89

+0

是的,它們是等價的。 – masnun