python-3.x 如何转换这个列表包含多个字典,我想扁平列表内一个列表?这是可能做到吗?我想响应如下所示

qcbq4gxm  于 2023-03-04  发布在  Python
关注(0)|答案(2)|浏览(105)

假设您有一个List,如下所示:

[{'name': 'Jon', 'values': [{'value': 'Decent'}, {'value': 'Average'}]},
     {'name': 'grunion', 'values': [{'value': 'Junk'}, {'value': 'Bad'}]},
     {'name': 'Mark', 'values': [{'value': 'Excellent'}, {'value': 'Very good'}]}]

有可能转换成这种列表:

[{'name': 'Jon', 'values': ['Decent' ,'Average']},
         {'name': 'grunion', 'values': ['Junk', 'Bad']},
         {'name': 'Mark', 'values': ['Excellent', 'Very good']}]

提前谢谢你!我是新的python,所以请尝试帮助我知道它很容易的问题,但我不知道如何使它完成。

6mw9ycah

6mw9ycah1#

您可以循环遍历嵌套字典并更新'values'的值:

dictionary =[{'name': 'Jon', 'values': [{'value': 'Decent'}, {'value': 'Average'}]},
     {'name': 'grunion', 'values': [{'value': 'Junk'}, {'value': 'Bad'}]},
     {'name': 'Mark', 'values': [{'value': 'Excellent'}, {'value': 'Very good'}]}]

for d in dictionary:
    d.update({'values': [nest_d['value'] for nest_d in d['values']]})

print(dictionary)

输出:

[{'name': 'Jon', 'values': ['Decent', 'Average']}, {'name': 'grunion', 'values': ['Junk', 'Bad']}, {'name': 'Mark', 'values': ['Excellent', 'Very good']}]

在这个循环中,我们首先使用d对列表中的所有字典进行迭代。我们必须通过使用列表解析创建列表来更新values键,该列表解析在嵌套字典nest_d上循环并获得value值。字典的结构使代码乍看起来有点难以理解,但我希望您看到它的作用。

5gfr0r5j

5gfr0r5j2#

您可以定义解析并定义处理函数:

lst = [
    {'name': 'Jon', 'values': [{'value': 'Decent'}, {'value': 'Average'}]},
    {'name': 'grunion', 'values': [{'value': 'Junk'}, {'value': 'Bad'}]},
    {'name': 'Mark', 'values': [{'value': 'Excellent'}, {'value': 'Very good'}]},
]

def transform(obj: dict):
    return {"name": obj['name'], "values": [val['value'] for val in obj['values']]}

res = [transform(obj) for obj in lst]

print(res)

# [{'name': 'Jon', 'values': ['Decent', 'Average']}, {'name': 'grunion', 'values': ['Junk', 'Bad']}, {'name': 'Mark', 'values': ['Excellent', 'Very good']}]

相关问题