在Python中解析具有嵌套列表的字典列表中的值

2024-10-01 04:51:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

p_mat_list = [
    {'name': 'Mirror', 'link': '/somelink1/'},
    {'name': 'Gold Leaf', 'link': '/somelink2/'}
]

首先,创建包含所有名称值的python列表:

^{pr2}$

但是,我不知道当列表中有嵌套列表和字典时,获取所有名称值的最佳方法是什么,如下所示:

p_mat_list = [
    [{'name': 'Painted'}, {'name': 'Wood'}],
    {'name': 'Mirror'},
    {'name': 'Gold Leaf'}
]

如何获得所有这些名称值:PaintedWoodMirrorGold Leaf?在

另外,我如何将每个嵌套列表中所有字典中的名称值合并为一个值,然后将其与其他值一起放入列表中,从而得到这些值:Painted Wood、Mirror、Gold Leaf。在

不会有嵌套更多级别的列表,并且其中不超过两个字典,因此,例如,从下面的列表中,需要获取这些值: 彩木,镜子,上漆木,金箔。在

p_mat_list = [
[{'name': 'Painted'}, {'name': 'Wood'}],
{'name': 'Mirror'},
[{'name': 'Varnished'}, {'name': 'Wood'}],
{'name': 'Gold Leaf'}
]

Tags: name名称信息列表字典mirror格式link
2条回答

如果您愿意引入外部库,那么可以使用more-itertools中的^{} function。像这样使用它:

>>> list(mt.collapse(p_mat_list, base_type=dict))
[{'name': 'Painted'},
 {'name': 'Wood'},
 {'name': 'Mirror'},
 {'name': 'Gold Leaf'}]

然后在您的例子中,您只需从每个dict中提取与'name'相对应的值,而不是列出它们的列表。在

^{pr2}$

这样做的好处是您不必担心列表嵌套有多少层。在

最好的方法是将复杂的列表展平,您有这样一个函数:

def flatten(x):
    if isinstance(x, dict) :
        return [x]
    elif isinstance(x, collections.Iterable) :
        return [a for i in x for a in flatten(i)]
    else:
        return [x]

此函数以您的p_mat_list作为参数并返回一个字典列表。在

^{pr2}$

您的product_materials列表:

['Painted', 'Wood', 'Mirror', 'Gold Leaf']

相关问题 更多 >