繁体   English   中英

在字典列表中查找项目

[英]Find item in list of dicts

我有一个像这样的dictionary list

list = [
   {
      "ENT_AUT":[
         "2018-11-27"
      ]
   },
   {
      "ENT_NAT_REF_COD":"C87193"
   },
   {
      "ENT_NAM":"MONEYBASE LIMITED"
   },
   {
      "ENT_NAM_COM":"MONEYBASE LIMITED"
   },
   {
      "ENT_ADD":"Ewropa Business Centre, Triq Dun Karm"
   },
   {
      "ENT_TOW_CIT_RES":"Birkirkara"
   },
   {
      "ENT_POS_COD":"BKR 9034"
   },
   {
      "ENT_COU_RES":"MT"
   }
]

在这里,每个dictionary将始终只包含一个键值对。 现在我需要知道ENT_NAMENT_AUT等所有字段的值。

我试过这样的事情:

ENT_NAM = (list[2].values())[0]
print('ENT_NAM = ', ENT_NAM)

它非常适合这个列表,但我的问题是包含字典的“ENT_NAM”并不总是在列表的第二个索引上。 我怎样才能概括这个解决方案,以便即使列表下的字典顺序发生变化,我也总能找到一个完美的解决方案?

你所描述的是一个搜索问题。 这里天真的解决方案可能很好:

def get_prop(dicts, k):
    return next(x[k] for x in dicts if k in x)

get_prop(l, "ENT_NAM")

顺便说一句,不要调用您的变量list :它会影响内置函数。

如果您需要使用此数据超过 3 次,我会将其简化为 dict:

def flatten(dicts):
    iterdicts = iter(dicts)
    start = next(iterdicts)
    for d in iterdicts:
        start.update(d)
    return start


one_dict = flatten(list_of_dicts)
one_dict["ENT_NAM"]

(还有很多其他方法可以展平 dicts 列表,我只是目前认为使用iter()来获取消耗品列表很简洁。)

正如 jasonharper 在评论中所说,如果可能,应将数据制定为单个字典。

如果这不能发生,您可以使用以下方法检索ENT_NAM的值:

print(list(filter(lambda elem: "ENT_NAM" in elem.keys(), my_list))[0]["ENT_NAM"])

回报:

MONEYBASE LIMITED

注意: list已重命名为my_list因为 list 是保留的 Python 关键字

如果所有键都是唯一的,您可以将字典列表展平为具有简单字典理解的字典。

注意:您不想使用list作为变量的名称,因为它是一种重要的内置类型。 改用lst之类的东西。

{ k: v for d in lst for k, v in d.items() }

结果:

{'ENT_AUT': ['2018-11-27'], 'ENT_NAT_REF_COD': 'C87193', 
 'ENT_NAM': 'MONEYBASE LIMITED', 'ENT_NAM_COM': 'MONEYBASE LIMITED', 
 'ENT_ADD': 'Ewropa Business Centre, Triq Dun Karm', 
 'ENT_TOW_CIT_RES': 'Birkirkara', 'ENT_POS_COD': 'BKR 9034', 
 'ENT_COU_RES': 'MT'}

获取键'ENT_NAM'的值现在只是:

{ k: v for d in lst for k, v in d.items() }['ENT_NAM']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM