1 回答
![?](http://img1.sycdn.imooc.com/545847f50001126402200220-100-100.jpg)
TA贡献1775条经验 获得超8个赞
将 for 循环简化为推导式的一个好方法是首先使用常规 for 循环来可视化该过程:
newLst = []
for member in var["members"]:
d = {"images": []}
for k, v in member["profile"].items():
if k.startswith("image"):
d["images"].append(v)
d["name"] = member["profile"].get("real_name")
if not d["name"]:
member["profile"].get("display_name")
newLst.append(d)
现在,我个人会选择上面的 for 循环。然而,你的问题是如何使用理解来解决它,所以这是我的版本:
newLst = [{"images": [v for k, v in member["profile"].items() if k.startswith("image")],
"name": member["profile"].get("real_name", member["profile"].get("display_name"))} for member in var["members"]]
它们两者的最大区别在于第一个很容易调试,或者至少遵循逻辑。而第二个则很难真正遵循。
两者的结果:
[{'images': ['https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg',
'https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg'],
'name': 'Egon Spengler'},
{'images': ['https://a.slack-edge.com...png',
'https://a.slack-edge.com...png',
'https://a.slack-edge.com...png',
'https://a.slack-edge.com...png',
'https://a.slack-edge.com...png',
'https://a.slack-edge.com...png',
'https://a.slack-edge.com...png',
'https://a.slack-edge.com...png'],
'name': 'Glinda Southgood'}]
添加回答
举报