gpt4 book ai didi

python - 嵌套字典理解以避免空值

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:25 24 4
gpt4 key购买 nike

我有一个 api 调用,它返回一个字典,其中包含所有用户的所有 ID和其他人获取 userDetails,例如:

>>> allIds=api.getAllIds()
{1,2,3,4,5}
>>> userDetails=api.getUserDetails(1)
{'name':'Bob','age':'19'}

我正在尝试将整个结构打包到一个包含 userId 的键和类似信息的值的字典中。

我可以让它工作:

>>> users={id:api.getUserDetails(id) for id in allIds}
{1:{'name':'bob','age':'19'},2:None,3:{'name':'alice','age':'21'},...}

问题是并非所有 ID 都返回响应,正如您在 id 2 调用中看到的那样。我正在尝试不使用传统循环,并且正在解决在调用之后清理生成的 dict 的情况:

>>> users=[id:users[id] for id in users.keys() if users[id]!=None]

它正在工作,但我试图不将空值放入而不是清理。在正常情况下,您可以像这样创建字典:

>>> a=[id:b[id] for id in b.keys() if b[id]!=None ]

但在我的例子中,如果我检查 b[i] 是否为 None... 那么我将调用 api 两次,因为我的 b[i] 表达式是api.getUserDetails(id),一个取值,另一个检查是否不是None。

所以我正在尝试类似嵌套字典理解的方法:

users = {(x,y) for x in usersIds for y in api.getUserDetails(x) if y!=None }

但我无法让它工作。

有人知道怎么做吗?

最佳答案

您可以将 api 调用的结果放在单例元组中:

users = {x: y for x in usersIds for y in (api.getUserDetails(x),) if y is not None}

演示:

lst = [(5,6), (2,None)]
d = {k: v for k, x in lst for v in (x,) if v is not None}
print(d)
# {5: 6}

但是,为此设置嵌套循环非常浪费,使用普通的 for 循环来构建字典可能更具可读性:

users = {}
for x in usersIds:
y = api.getUserDetails(x)
if y is not None:
users[x] = y

关于python - 嵌套字典理解以避免空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44440338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com