[英]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_NAM
、 ENT_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.