嵌套字典理解以避免空值

2024-10-02 18:19:59 发布

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

我有一个api调用,它返回一个字典,其中包含所有用户的所有id 以及其他人,如:

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

我试图用userId类键和类似info的值将整个结构打包到dict中。在

我可以使用:

^{pr2}$

问题是并不是所有的id都会像您看到的id 2调用那样返回响应。我试着不使用传统循环,我正在解决这样的情况:在调用后清理结果dict

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

它是有效的,但我尽量不把空值放进去,而不是清理。在正常情况下,您可以创建如下dict:

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

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

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

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

但我做不到。在

有人知道怎么做吗?在


Tags: 用户innoneapiidforif字典
1条回答
网友
1楼 · 发布于 2024-10-02 18:19:59

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

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

演示:

^{pr2}$

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

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

相关问题 更多 >