亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用具有 If/Else 條件的字典理解從 API 響應中選擇鍵/值對

使用具有 If/Else 條件的字典理解從 API 響應中選擇鍵/值對

溫溫醬 2023-07-18 13:32:01
我已經編譯了一個名為“user_responses”的 API 響應列表。這是列表中響應的示例:{    "ok": true,    "members": [        {            "id": "W012A3CDE",            "team_id": "T012AB3C4",            "name": "spengler",            "deleted": false,            "color": "9f69e7",            "real_name": "spengler",            "tz": "America/Los_Angeles",            "tz_label": "Pacific Daylight Time",            "tz_offset": -25200,            "profile": {                "avatar_hash": "ge3b51ca72de",                "status_text": "Print is dead",                "status_emoji": ":books:",                "real_name": "Egon Spengler",                "display_name": "spengler",                "real_name_normalized": "Egon Spengler",                "display_name_normalized": "spengler",                "email": "[email protected]",                "image_24": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg",                "image_32": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg",                "image_48": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg",                "image_72": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg",                "image_192": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg",                "image_512": "https://.../avatar/e3b51ca72dee4ef87916ae2b9240df50.jpg",                "team": "T012AB3C4"            },        },    ],我想建立一本字典,其中包括:1. 一個鍵,即用戶的真實姓名。如果用戶沒有真實名稱,那么我想使用該用戶的顯示名稱。為此,我嘗試在字典理解中使用三元表達式來處理 if/else 條件:{(sub_dict['profile']['real_name'] if 'real_name' in sub_dict['profile]   else sub_dict['profile']['display_name']):value  for response in user_responses  for sub_dict in response.get('members')}這似乎只是默認為每個用戶使用顯示名稱,這不是我想要的。2. 一個值,它是每個用戶的所有圖像的列表。為此,我想我可以編寫一個列表理解,其中包含以“圖像”一詞開頭的所有鍵的值。{(key:[sub_dict['profile'][k] for k in sub_dict['profile'] if k.startswith('image')]  for response in user_responses  for sub_dict in response.get('members')}有更好的方法來實現這一點嗎?預先感謝您的任何幫助。
查看完整描述

1 回答

?
www說

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'}]


查看完整回答
反對 回復 2023-07-18
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號