以某种方式可以用“map”在循环中重写这个棘手的dict函数调用(pythonic“cases”..)吗?
有一些java函数调用,首先我使用“if-elif”语句,然后决定使用dict,正如你所看到的,我尝试使用dict而没有例外。
我想重写“for”循环,将“dict”-calls映射到列迭代器。可能吗 ?
type_resolver={'java.lang.String' : set.getString,
'java.lang.Integer' : set.getInt,
#'java.lang.util.Date' : lambda x: None,#set.getTimestamp,
'java.lang.Short' : set.getShort,
#'java.util.Collection': lambda x: None,
#'java.util.Date': lambda x: None,
#'boolean': lambda x: None
}
while set.next():
for column in COLUMNS:
try:
data=type_resolver[STRCT[column]](column)
except KeyError:
data=None
DATAR[column].append(data)
答案 0 :(得分:0)
使用get
代替检查KeyError
帮助:
for column in COLUMNS:
DATAR[column].append(type_resol.get(STRCT[column], lambda x: None))(column))
你也可以把它放一行,但可能已经太长了:
[DATAR[column].append(type_resol.get(STRCT[column], lambda x: None))(column))
for column in COLUMN]
此外,最后一个变体会抛弃该列表,因为它充满了None
。这可能会产生误导。无论如何你需要两条线。所以只需使用第一个解决方案。