【问题标题】:How to access dictionary-type items in a list (python or maybe javascript)如何访问列表中的字典类型项目(python 或者可能是 javascript)
【发布时间】:2016-08-13 10:57:13
【问题描述】:

我有一些数据存储在 django“食物”模型的“营养素”JSONField 中。

底部的一些示例数据结构。

数据是 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}]

【问题讨论】:

    标签: python json list dictionary


    【解决方案1】:

    假设您在nutrients 中有字典列表。现在,您可以过滤列表以查找与具有特定值的特定键匹配的项目。例如,要查找带有“锰,锰”的name 的字典,您可以这样做:

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

    现在matches 列表应该包含name 键中包含“锰,锰”的营养素。

    您可以使用索引访问第一个营养素 - matches[0]。现在您也可以访问其他密钥,例如matches[0].get('value')

    【讨论】:

    • 太棒了 - 非常感谢。工作,这是一个漂亮的小单行
    • 我意识到这相当于 [n for n in assistant where n.get('name') == 'Manganese,Mn'] 顺便说一句,这是我喜欢的方式,但我经过速度测试它和这个 [n for n..] “pythonic”方式在这种情况下实际上也快了一点
    • 是的,它们是等价的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多