Python 将多for循环if/else转换为列表理解

Python 将多for循环if/else转换为列表理解,python,list-comprehension,Python,List Comprehension,我想把它转换成一个列表 当前代码 some_list = [[{"apple":"red"}, {"orange":"orange"}, {"pineapple":"yellow"}, [{"box":"brown"}, {"table":"grey"}, {"seat":&qu

我想把它转换成一个列表

当前代码

some_list = [[{"apple":"red"}, {"orange":"orange"}, {"pineapple":"yellow"}, [{"box":"brown"}, {"table":"grey"}, {"seat":"green"}], {"grapes":"purple"}, {"cherry":"red"}]]

category_list = []
for item in some_list:
    tag_list = []
    for elem in item:
        if isinstance(elem, list):
            for x in elem:
                tag_list.append(x)
        else:
            tag_list.append(elem)
            
    category_list.append(tag_list)
    
category_list
所需输出

[[{'apple': 'red'},
  {'orange': 'orange'},
  {'pineapple': 'yellow'},
  {'box': 'brown'},
  {'table': 'grey'},
  {'seat': 'green'},
  {'grapes': 'purple'},
  {'cherry': 'red'}]]
[[x for x in elem] if isinstance(elem, list) else elem for item in some_list for elem in item]
我的尝试

[[{'apple': 'red'},
  {'orange': 'orange'},
  {'pineapple': 'yellow'},
  {'box': 'brown'},
  {'table': 'grey'},
  {'seat': 'green'},
  {'grapes': 'purple'},
  {'cherry': 'red'}]]
[[x for x in elem] if isinstance(elem, list) else elem for item in some_list for elem in item]
结果

[{'apple': 'red'},
 {'orange': 'orange'},
 {'pineapple': 'yellow'},
 [{'box': 'brown'}, {'table': 'grey'}, {'seat': 'green'}],
 {'grapes': 'purple'},
 {'cherry': 'red'}]

但这正好让我回到我开始的地方。

试着理解一下:

some_list = [[{"apple":"red"}, {"orange":"orange"}, {"pineapple":"yellow"}, [{"box":"brown"}, {"table":"grey"}, {"seat":"green"}], {"grapes":"purple"}, {"cherry":"red"}]]

categories = [x if type(x) == dict else y for x in some_list[0] for y in x]

print(categories)
# Prints 
# [{'apple': 'red'}, {'orange': 'orange'}, {'pineapple': 'yellow'}, 
# {'box': 'brown'}, {'table': 'grey'}, {'seat': 'green'}, 
# {'grapes': 'purple'}, {'cherry': 'red'}]
如果元素是字典,则会追加该元素,否则会追加元素中的每个元素(即列表)


注意:我实际上是一个新的列表理解,所以让我知道如果我犯了任何错误

试试这个理解:

some_list = [[{"apple":"red"}, {"orange":"orange"}, {"pineapple":"yellow"}, [{"box":"brown"}, {"table":"grey"}, {"seat":"green"}], {"grapes":"purple"}, {"cherry":"red"}]]

categories = [x if type(x) == dict else y for x in some_list[0] for y in x]

print(categories)
# Prints 
# [{'apple': 'red'}, {'orange': 'orange'}, {'pineapple': 'yellow'}, 
# {'box': 'brown'}, {'table': 'grey'}, {'seat': 'green'}, 
# {'grapes': 'purple'}, {'cherry': 'red'}]
如果元素是字典,则会追加该元素,否则会追加元素中的每个元素(即列表)


注意:我实际上是一个新的列表理解,所以让我知道如果我犯了任何错误

“但这正好让我回到我开始的地方”-你的输入和期望的输出有什么不同?他们看起来一模一样。编辑:哦,我明白了。输入中有第三个嵌套的内部列表,其中包含
“box”
“table”
、和
“seat”
。这正是在你的问题中明确提出的有帮助的事情。让我们更容易帮助你。参见。列表理解的两个设计目标是降低复杂性和增加可读性。你似乎走在了相反的方向。@Chris抱歉,我刚刚更新了我的结果以显示差异。@KlausD。抱歉,我的问题不是“列表理解的设计目标是什么?”再次,我最真诚的歉意是,当我写下“我正试图将其转换为列表理解”时,这并不清楚。你想删除第三个问题吗['和第一个']'?不?那么也许你想做的不是很清楚?!“但这正好让我回到我开始的地方”-你的输入和期望的输出有何不同?它们看起来是一样的。编辑:哦,我明白了。输入中有第三个嵌套的内部列表,包含
“box”
“table”
,和
“seat”
。这正是在您的问题中明确指出的有帮助的事情。让我们能够轻松地帮助您。请参阅。列表理解的两个设计目标是降低复杂性和增加可读性。您似乎走在了相反的方向。@Chris抱歉,我刚刚将结果更新为sh区别何在。@KlausD.对不起,我的问题不是“列表理解的设计目标是什么?”再次,我最真诚的道歉,当我写道:“我正试图将其转换为列表理解”时,这一点并不清楚。你想删除第三个“[”和第一个“]”?不?那么也许你想做的不太清楚?!