是否可以用地图重写这些周期?

时间:2013-06-02 11:10:58

标签: python jython

以某种方式可以用“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)

1 个答案:

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