如何从 Python 中的“dict”对象列表中基于键提取值

Posted

技术标签:

【中文标题】如何从 Python 中的“dict”对象列表中基于键提取值【英文标题】:How to extract values based on keys from a list of `dict` objects in Python 【发布时间】:2021-09-03 00:15:43 【问题描述】:

我有一个列表sample_list 看起来像这样:

['ID': '123456', 'price': '1.111', 'ID': '987654', 'price': '200.888', 'ID': '789789', 'price': '0.212',..,...]

它包含多个dict 对象,现在我想编写一个函数,将ID 列表作为输入并返回相应的price,类似于:

def mapping_data(ids: list) -> map:
    mapping_data['123456'] = '1.111
    return mapping_data

实现这一目标的最简单方法是什么?

【问题讨论】:

【参考方案1】:

您可以使用简单的list_comprehensionif condition

def mapping_data(ids):
    return [d['price'] for id in ids for d in l if d['ID'] == id]

完整代码:

l = ['ID': '123456', 'price': '1.111', 'ID': '987654',
                                          'price': '200.888', 'ID': '789789', 'price': '0.212']


def mapping_data(ids):
    return [d['price'] for id in ids for d in l if d['ID'] == id]


mapping_data(['987654', '123456']) #prints ['200.888', '1.111']

如果您需要 id 详细信息,也可以使用dict_comprehension

def mapping_data(ids):
    return id:d['price'] for id in ids for d in l if d['ID'] == id
# prints '987654': '200.888', '123456': '1.111'

更好的选择:

    Dict_comprehension:
def mapping_data(ids):
    return i['ID']:i['price'] for i in l if i['ID'] in ids


mapping_data(['987654', '123456']) 

【讨论】:

以上是关于如何从 Python 中的“dict”对象列表中基于键提取值的主要内容,如果未能解决你的问题,请参考以下文章

捋一捋Python中的Dict(下)

OrderedDict如何在Python中保持秩序

python - 如何使用列表中的键和Python中的空值初始化dict?

将嵌套dict的值赋给python中的列表

python - 如何在python中附加一个列表时处理异常,其中包含从存储从.json文件读取的数据的dict读取的数据?

从Dict(python)中的itemgetter查找值