将key-> values映射转换为value-> keys的Groovy方法

时间:2019-06-17 08:17:58

标签: groovy

我正在尝试提出一种从值列表中制作键的方法。

例如:我有这张地图df.loc[df['col'].str.startswith('ABC'), 'col'] = 1 df.loc[df['col'].str.contains(r'ROM|R&OM', na=False), 'col'] = 2

我想将其转换为[ a: [1, 2], b: [1, 3, 4] ]

基本上,我要求使用How to transform key/value in Map 的常规版本。

到目前为止,我的解决方案有点过多,因为我收集了所有值并创建了新的值-密钥对:

[ 1: [a, b], 2: [a], 3: [b], 4: [b] ]

有没有更好的方法来实现这种转变?

1 个答案:

答案 0 :(得分:3)

您可以在空白地图上使用injectwithDefault来做到这一点:

def m = [a: [1, 2], b: [1, 3, 4]]

m.inject([:].withDefault {[]}) { map, value ->
    value.value.each { map[it] << value.key }
    map
}