我有一个list of dictionary,类似于这样:
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”的字典并不总是在列表的第二个索引上。如何概括这个解决方案,以便即使列表中字典的顺序发生变化,我也总是能找到一个完美的解决方案?
发布于 2022-01-28 16:47:38
如果所有的键都是唯一的,您可以通过简单的字典理解将字典列表压缩到字典中。
注意:您不希望使用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']发布于 2022-01-28 16:31:41
你所描述的是一个搜索问题。在这里,天真的解决方案可能很好:
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"](有很多其他的方法可以把一张字典列表压平,我只是目前认为使用iter()来获得一个可消费的列表是很好的。)
发布于 2022-01-28 16:38:51
正如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关键字。
https://stackoverflow.com/questions/70896913
复制相似问题