Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在groovy中最好地从键列表/值列表获取映射?_Python_Dictionary_Groovy - Fatal编程技术网

Python 如何在groovy中最好地从键列表/值列表获取映射?

Python 如何在groovy中最好地从键列表/值列表获取映射?,python,dictionary,groovy,Python,Dictionary,Groovy,在python中,我可以执行以下操作: keys = [1, 2, 3] values = ['a', 'b', 'c'] d = dict(zip(keys, values)) assert d == {1: 'a', 2: 'b', 3: 'c'} 在groovy中,有没有一种很好的方法可以从键列表和值列表开始构建映射 def keys = [1, 2, 3] def values = ['a', 'b', 'c'] def pairs = [keys, values].transpos

在python中,我可以执行以下操作:

keys = [1, 2, 3]
values = ['a', 'b', 'c']
d = dict(zip(keys, values))

assert d == {1: 'a', 2: 'b', 3: 'c'}
在groovy中,有没有一种很好的方法可以从键列表和值列表开始构建映射

def keys = [1, 2, 3]
def values = ['a', 'b', 'c']
def pairs = [keys, values].transpose()

def map = [:]
pairs.each{ k, v -> map[k] = v }
println map
或者:

def map = [:]
pairs.each{ map << (it as MapEntry) }
defmap=[:]

每个{map都没有直接内置到groovy中的任何东西,但是有许多方法可以轻松解决它,这里有一种:

def zip(keys, values) {
    keys.inject([:]) { m, k -> m[k] = values[m.size()]; m } 
}

def result = zip([1, 2, 3], ['a', 'b', 'c'])
assert result == [1: 'a', 2: 'b', 3: 'c']

Groovy 1.8中还有
collectEntries
函数

def keys = [1, 2, 3]
def values = ['a', 'b', 'c']
[keys,values].transpose().collectEntries { it }

非常好,它看起来像是python的
transpose()
等价于
zip()
。现在只要有一个对列表的映射构造函数就好了。
[:].putAll(pairs.collect{new MapEntry(it[0],it[1]))
就像一行代码,但比我想要的更难看。@ataylor请参阅我更新的帖子,了解使用
MapEntry
[keys,values].transpose()的另一种方法。inject([:]){map,it->map非常好。现在期待1.8甚至更多。你甚至可以省去identity闭包:
[keys,values].transpose().collections()
@Maxy-B是的,从1.8.5开始:-)