0

是否有可能用“map”循环重写这个棘手的dict函数调用(pythonic“cases”..)?

有一些 java 函数调用,首先我使用“if-elif”语句,然后决定使用 dict,如您所见,我尝试使用 dict 没有例外。

我想通过将“dict”调用映射到列迭代器来重写“for”循环。可能吗 ?

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)
4

1 回答 1

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. 这可能会产生误导。无论如何,您需要两条线。所以只需使用第一个解决方案。

于 2013-06-02T11:39:32.963 回答