python - 将多 for 循环 if/else 转换为列表理解
问题描述
我正在尝试将其转换为列表理解。
当前代码
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'}]
但这只是让我回到我开始的地方。
解决方案
试试这个理解:
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'}]
如果它是字典,则附加元素,否则附加元素中的每个元素(这将是一个列表)。
注意:我实际上是列表理解的新手,所以如果我犯了任何错误,请告诉我!
推荐阅读
- python - 我们如何在本地在 python 中生成 codecov 文件
- javascript - Javascript | 从对象数组中删除不需要的数据
- cassandra - 是否可以将密钥空间部分分配给另一个 DC?
- java - 每次更改标签时如何阻止片段重置
- java - 如何在 Flutter/Dart 中从音频文件(必须是有符号的 int / 字节)中获取字节数据,就像 AudioInputStream 在 java 中为您提供的一样
- javascript - 正则表达式自定义长度,但不允许空格
- sharepoint - 无法加载文件或程序集“Microsoft.Office.Excel.WebUI,版本=15.0.0.0,
- r - 根据 R 中的现有值替换栅格中元素的百分比
- javascript - 如何对调用同一文件/类中的其他函数的函数进行单元测试,以便我无法模拟它们?
- ios - 访问对象(指针)表单 ObjectIdentifier