用相应的值替换字典列表中的空值

2024-09-29 01:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个缺少值的字典列表。我想用更有效的方法将空值替换为相应的值

输入:

[
    {"Host": "dailymotion", "Url": ""},
    {"Host": "youtube", "Url": ""},
    {"Host": "Vimeo", "Url": ""},
    {"Host": "", "Url": "https://www.dailymotion.com/video/x37j4ox"},
    {"Host": "", "Url": "https://www.youtube.com/watch?v=uDLQfA2o0"},
    {"Host": "", "Url": "https://vimeo.com/42399207"},
]

输出:

[
    {"Host": "dailymotion", "Url": "https://www.dailymotion.com/video/x37j4ox"},
    {"Host": "youtube", "Url": "https://www.youtube.com/watch?v=uDLQfA2o0"},
    {"Host": "Vimeo", "Url": "https://vimeo.com/42399207"},
]


Tags: httpscomhosturl列表字典youtubewww
3条回答

另一种即使列表中元素的顺序发生更改也有效的解决方案:

data = [
    {"Host": "dailymotion", "Url": ""},
    {"Host": "youtube", "Url": ""},
    {"Host": "Vimeo", "Url": ""},
    {"Host": "", "Url": "https://www.youtube.com/watch?v=uDLQfA2o0"},
    {"Host": "", "Url": "https://www.dailymotion.com/video/x37j4ox"},
    {"Host": "", "Url": "https://vimeo.com/42399207"},
]

hosts = [host['Host'] for host in data if host["Host"]]
urls = [host['Url'] for host in data if host["Url"]]
out = []
for host in hosts:
    for url in urls:
        if host.lower() in url.lower():
            out.append({"Host": host, "Url": url})
            break
print (out)
    

输出:

[{'Host': 'dailymotion', 'Url': 'https://www.dailymotion.com/video/x37j4ox'}, {'Host': 'youtube', 'Url': 'https://www.youtube.com/watch?v=uDLQfA2o0'}, {'Host': 'Vimeo', 'Url': 'https://vimeo.com/42399207'}]

另一个解决方案:

lst = [
    {"Host": "dailymotion", "Url": ""},
    {"Host": "youtube", "Url": ""},
    {"Host": "Vimeo", "Url": ""},
    {"Host": "", "Url": "https://www.dailymotion.com/video/x37j4ox"},
    {"Host": "", "Url": "https://www.youtube.com/watch?v=uDLQfA2o0"},
    {"Host": "", "Url": "https://vimeo.com/42399207"},
]

hosts = [d["Host"] for d in lst if d["Host"] != ""]
urls = [d["Url"] for d in lst if d["Url"] != ""]

out = [{"Host": h, "Url": u} for h, u in zip(hosts, urls)]
print(out)

印刷品:

[
    {"Host": "dailymotion", "Url": "https://www.dailymotion.com/video/x37j4ox"},
    {"Host": "youtube", "Url": "https://www.youtube.com/watch?v=uDLQfA2o0"},
    {"Host": "Vimeo", "Url": "https://vimeo.com/42399207"},
]

你可以

  • 使用zip将前半部分(raw[:len(raw) // 2])与后半部分(raw[len(raw) // 2:])配对

  • 然后从一个(d1['Host'])取Host,从另一个(d2['Url'])取Url

raw = [{'Host': 'dailymotion', 'Url': ''},
       {'Host': 'youtube', 'Url': ''},
       {'Host': 'Vimeo', 'Url': ''},
       {'Host': '', 'Url': 'https://www.dailymotion.com/video/x37j4ox'},
       {'Host': '', 'Url': 'https://www.youtube.com/watch?v=uDLQfA2o0'},
       {'Host': '', 'Url': 'https://vimeo.com/42399207'}]

result = [{'Host': d1['Host'], 'Url': d2['Url']}
          for d1, d2 in zip(raw[:len(raw) // 2], raw[len(raw) // 2:])]
print(result)

相关问题 更多 >