小编Ann*_*yme的帖子

有没有更优雅的方法来过滤函数的失败结果?

现在,我的代码中有些内容如下所示:

def f(x):
    if x == 5:
        raise ValueError
    else:
        return 2 * x

interesting_values = range(10)
result = []
for i in interesting_values:
    try:
        result.append(f(i))
    except ValueError:
        pass
Run Code Online (Sandbox Code Playgroud)

f实际上是一个更复杂的函数,它以不可预测的方式针对特定的值失败(f(x)在尝试之前,我不知道是否会失败)。

我对此感兴趣的是result:的所有有效结果的列表f

我想知道是否有办法使第二部分像列表理解一样。当然,我不能简单地做到这一点:

def f(x):
    if x == 5:
        raise ValueError
    else:
        return 2 * x

interesting_values = range(10)
result = [f(i) for i in interesting_values]
Run Code Online (Sandbox Code Playgroud)

因为对call的调用f(5)将使所有操作失败,但是也许有一种方法可以将try-except结构集成到列表推导中。是这样吗

编辑:我可以控制f。

python python-3.x

7
推荐指数
1
解决办法
78
查看次数

当我从同一个函数中获取键和值时,使用字典理解构建一个 dict

假设我有一个复杂的函数get_stuff,它接受一个 int 并返回一个元组,第一个元素的类型是 str。下面的示例具有相同的行为,但假设实际函数更复杂并且不能轻易地一分为二:

def get_stuff(x):
    return str(5*x),float(3*x)
Run Code Online (Sandbox Code Playgroud)

我想要的是构建一个 dict,其 (key,value) 对是在特定整数集上调用时 get_stuff 的结果。一种方法是:

def get_the_dict(set_of_integers):
    result = {}
    for i in set_of_integers:
        k,v = get_stuff(i)
        result[k] = v
    return result
Run Code Online (Sandbox Code Playgroud)

我宁愿为此使用 dict comprehension,但我不知道是否可以在理解中拆分该对以分别捕获键和值。

def get_the_dict_with_comprehension(set_of_integers):
    return {get_stuff(i) for i in set_of_integers} #of course this doesn't work
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

python dictionary-comprehension

2
推荐指数
1
解决办法
40
查看次数