有没有比 try except(涉及 None 或 empty 时)更好的方法从列表理解中获得 int 结果?

Is there a better way to get an int result out of list comprehension than try except (when None or empty is involved)?

为清楚起见进行编辑:

我正在使用列表推导式从数据列表中提取单个字段。我只想要列表理解中的整数值,但列表理解给了我列表列表。因此,例如,我将传递一个有序的项目列表,并取回一个整数数量的已用项目,但它不会给我一个整数列表。它会给我一个这样的列表:[[1]、[2]、[5]、[60]、[0]、[]、[]、[4]](我将有 None 个值有时也会在这里,因为我从一个缺少值的数据库中提取数据,这本身可能就是一个问题。但这不是这个问题的重点。我想知道是否有获取这些值的方法没有 运行 进入索引错误。

resource['new_item'] = [item['used_qty'] for item in items if item['item_id'] == resource['item_id']]
    try:
        resource['new_item'] = resource['new_item'][0]
    except IndexError:
        resource['new_item'] = 0

在可能涉及 None 或空数组的情况下,从列表理解中取出单个整数似乎比应有的难度更大。

当我有一个单一的 int 列表列表时,我使用的一种方法是:

a = [[1], [2], [3], [4], [5]]
a = sum(a, [])
print(a)
>>> [1, 2, 3, 4, 5]

a[0]

或者我使用:

a = [letter for letter in letters if letter == something].pop()

a = [letter for letter in letters if letter == something][0]

但是如果可能返回一个 None 或一个空数组,所有这些都会中断,我现在正在处理很多事情。请分享一些获得列表中多汁 int 的好方法,这些方法比尝试更好,除了。

你可以这样做

resource['new_item'] = 0
# just update first matching result
for item in items:
    if item['item_id']==resourc['item_id']:
        resource['new_item'] = item['used_qty']
        break

我仍然不确定我是否完全理解这个问题,但你可以尝试在 python 中使用 or 开关,如果第一部分,它将在 or 之后评估第二部分部分是假的,例如空列表或提到的 None 值。

例如:

resource['new_item'] = [item['used_qty'] or [0] for item in items if item['item_id'] == resource['item_id']]

# defaults to `0` if contains falsy value
resource['new_item'] = resource['new_item'][0]