使用Python中的嵌套列表从字典列表中解析值

时间:2017-02-08 00:19:42

标签: python list dictionary

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

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

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

product_materials = []
for material in p_mat_list:
    product_materials.append(material['name'])

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

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'}
]

2 个答案:

答案 0 :(得分:2)

如果您愿意引入外部库,则可以使用collapse() function中的more-itertools。使用它是这样的:

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

然后在你的情况下,你可以从每个字典中提取对应于'name'的值,而不是列出它们。

>>> [d['name'] for d in mt.collapse(p_mat_list, base_type=dict)]

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

答案 1 :(得分:0)

最好的方法是压缩复杂列表,你有这样的函数:

Expected:
[['12963' '40']
 ['09993' '12']
 ['99993' '1']
 ['01003' '1234']]
Received:
[['12963' '40']
 ['9993' '12']
 ['99993' '1']
 ['1003' '1234']]

此函数将您的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

您的get_list = flatten(p_mat_list) product_materials = [] for material in get_list : product_materials.append(material['name']) 列表:

product_materials
相关问题