首页 > 解决方案 > 在python中通过字符串条件提取列表中的字典的一部分

问题描述

我有一个列表,其中包含以下格式的字典:

mydataset =
    [{'thing1': 'pink',
    'thing2': 'apple',
    'thing3': 'car',
    'data': [{'firstname': 'jenny',
        'lastname': 'jones',
        }]},
    {'thing1': 'blue',
    'thing2': 'banana',
    'thing3': 'bicycle',
    'data': [{'firstname': 'david',
        'lastname': 'walls',
        }]}]

我希望能够提取firstname在“数据”中调用的所有项目,即'jenny''david'

我尝试了一种方法myextract = [x in x if mydataset['data']],但当然它失败了,因为我认为我正在寻找一个价值。我对数据结构的心智模型目前不正确。

标签: pythondictionary

解决方案


使用以下列表推导:

res = [di["firstname"]for d in mydataset for di in d["data"] if "firstname" in di]
print(res)

输出

['jenny', 'david']

上面的列表推导等价于下面的 for 循环:

res = []
for d in mydataset:
    for di in d["data"]:
        if "firstname" in di:
            res.append(di["firstname"])

print(res)

请注意,上述两种解决方案都适用于子字典中的多个元素,d["data"]即使"firstname"键不存在也是如此。

为了可重用性,您还可以定义一个函数,让您访问数据集中的各个值并将其用于此特定示例:

def nested_getitem(path, dic):
    from operator import getitem
    from functools import reduce
    return reduce(getitem, path, dic)


res = [nested_getitem(["data", 0, "firstname"], d) for d in mydataset]
print(res)

输出

['jenny', 'david']

推荐阅读