OpenRefine使用jython从列表中删除重复项

时间:2013-03-14 20:02:32

标签: jython openrefine

我的列中包含重复的值,例如

VMS5796,VMS5650,VMS5650,CSL,VMA5216,CSL,VMA5113

我正在使用jython应用转换来删除重复项(On error设置为保持原始状态),这是代码:

return list(set(value.split(",")))

哪个适用于预览,但未应用于该列。我做错了什么?

2 个答案:

答案 0 :(得分:1)

Map函数非常强大,并且在Python / Jython中使用不足。可能还不清楚这个代码在内部做了什么,但是在处理列单元格值中的列表或数组中需要作为字符串类型“映射”然后应用连接的数百万位值时,它的速度非常快。分隔符char,例如逗号','

deduped_list = list(set(value.split(",")))
return ', '.join(map(str, deduped_list))

可能有其他甚至比这更快的变化,但这应该让你朝着正确的方向前进。

有趣的是,您还可以获得像OpenRefine这样的EVAL可接受的'可打印表示'repr(对象),并且对于查看您的值的表示也很有用...,我刚刚发现,更深入地研究这个答案。

deduped_list = list(set(value.split(",")))
return ', '.join(map(repr, deduped_list)) 

答案 1 :(得分:0)

预览隐式格式化显示内容。你的表达式返回一个数组(不能存储在单元格中),所以如果你想得到它的字符串形式,最后添加.join(',')。