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.对不起,我的问题不是“列表理解的设计目标是什么?”再次,我最真诚的道歉,当我写道:“我正试图将其转换为列表理解”时,这一点并不清楚。你想删除第三个“[”和第一个“]”?不?那么也许你想做的不太清楚?!