1 回答

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'}]
添加回答
舉報