首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字典列表中查找项目

在字典列表中查找项目
EN

Stack Overflow用户
提问于 2022-01-28 16:24:42
回答 3查看 119关注 0票数 0

我有一个list of dictionary,类似于这样:

代码语言:javascript
复制
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等所有字段的值。

我试过这样的方法:

代码语言:javascript
复制
ENT_NAM = (list[2].values())[0]
print('ENT_NAM = ', ENT_NAM)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-28 16:47:38

如果所有的键都是唯一的,您可以通过简单的字典理解将字典列表压缩到字典中。

注意:您不希望使用list作为变量的名称,因为它是一个重要的内置类型。而是使用类似于lst的东西。

代码语言:javascript
复制
{ k: v for d in lst for k, v in d.items() }

结果:

代码语言:javascript
复制
{'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'的值现在只需:

代码语言:javascript
复制
{ k: v for d in lst for k, v in d.items() }['ENT_NAM']
票数 1
EN

Stack Overflow用户

发布于 2022-01-28 16:31:41

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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"]

(有很多其他的方法可以把一张字典列表压平,我只是目前认为使用iter()来获得一个可消费的列表是很好的。)

票数 2
EN

Stack Overflow用户

发布于 2022-01-28 16:38:51

正如jasonharper在评论中所说,如果可能的话,数据应该作为一个单一的字典。

如果这种情况无法发生,则可以使用以下方法检索ENT_NAM的值:

代码语言:javascript
复制
print(list(filter(lambda elem: "ENT_NAM" in elem.keys(), my_list))[0]["ENT_NAM"])

返回:

代码语言:javascript
复制
MONEYBASE LIMITED

注意:list被重命名为my_list,因为list是一个保留的Python关键字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70896913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档