有没有比 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]
为清楚起见进行编辑:
我正在使用列表推导式从数据列表中提取单个字段。我只想要列表理解中的整数值,但列表理解给了我列表列表。因此,例如,我将传递一个有序的项目列表,并取回一个整数数量的已用项目,但它不会给我一个整数列表。它会给我一个这样的列表:[[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]