Python: 没有列表的小 for 语句

Python: Small for statement without list

我正在尝试优化我的代码。我正在努力使我的 for 语句尽可能短。问题是简写语句是(当然)"returning" 一个列表。我想要它 "return" 一个字符串。

b = [key2 for key2 in LUT_value.keys() if LUT_value[key2] == self.value]

Keys 是一个字符串,f.g 可以是 "Name"。问题是 b 变成:

b = ['Name']

我要返回 a + ' ' + b,但这是行不通的。我怎样才能解决这个问题并仍然保留小声明?如果可以的话。

如果我正确理解你的问题。当你这样做时

b = [key2 for key2 in LUT_value.keys() if LUT_value[key2] == self.value]

你有一个只有一个字符串的列表?如果是这样的话:

b = [key2 for key2 in LUT_value.keys() if LUT_value[key2] == self.value][0]

您可以将 next 与生成器表达式一起使用:

b = next(key2 for key2 in LUT_value.keys() if LUT_value[key2] == self.value)

注意,如果值不存在,这将引发 StopIteration。如果不能保证该值存在,则您需要捕获错误并对其进行处理(或者让它传播我想......)或者您可以为 next:

提供默认值
value_gen = (key2 for key2 in LUT_value.keys() if LUT_value[key2] == self.value)
some_default = 'Default Yeah!'
b = next(value_gen, some_default)

如果您需要先找到这样的匹配值,使用next() function and a generator expression:

b = next((key2 for key2, value in LUT_value.items() if value == self.value), '')

这会生成您的第一个 key2 符合条件的值,如果没有这样的值,则生成一个空字符串。我使用 dict.items() 而不是循环 dict.keys(),然后查找各个值。此外,遍历 dict.keys() 是多余的;如果您只想遍历键,只需直接遍历 dict 对象即可。

我想知道你是否应该存储一个 inverse 映射:

inverse_LUT_values = {value: key for key, value in LUT_value.items()}

然后只需使用:

b = inverse_LUT_values.get(self.value, '')

甚至

b = inverse_LUT_values[self.value]

inverse_LUT_values 存储以供重复使用。如果有多个具有相同值的键可以匹配,对您来说似乎无关紧要,因此反向映射只保留一个这样的键。