golang定义了类似python的dict,并将值附加到dict中的列表中



我是新手,正在尝试实现如下类似python的嵌套结构,我无法在golang中定义空的dict/map,该dict/map可以具有特定结构/classobj的列表,并且在迭代数据时,我无法将项附加到map/dict中。。。我将非常感谢在这方面的任何帮助。。。感谢

items = [
    ("item1", someObj1),
    ("item2", someObj2),
    ("item3", someObj3),
    ("item3", someObj5),
    ("item1", someObj4),
]
rectors = {}
for item, obj in items:
    try:
        rectors[item].append(obj)
    except KeyError:
        rectors[item] = [obj]
print rectors
# OUTPUT: {'item2': [someObj2], 'item3': [someObj3, someObj5], 'item1': [someObj1, someObj4]}

它没有那么干净。。但这大致符合你的要求,应该会让你走上正确的道路:

type someObj struct {
}
func main() {
    items := map[string][]someObj{
        "item1": []someObj{someObj{}},
        "item2": []someObj{someObj{}},
        "item3": []someObj{someObj{}},
    }
    items["item1"] = append(items["item1"], someObj{})
    rectors := make(map[string][]someObj)    
    for key, val := range items {
        if obj, exists := rectors[key]; exists {
            rectors[key] = append(obj, val...)
        } else {
            rectors[key] = val
        }
    }
    fmt.Printf("%v", rectors)
}

输出:

map[item3:[{}] item1:[{} {}] item2:[{}]]

主要区别在于。。您不能初始化映射使用已经存在的键来更改项(就像您在示例中所做的那样,在初始化过程中添加了item1)。因此,这成为映射初始化后的额外步骤。你总是可以做:

"item1": []someObj{someObj{}, someObj{}},

但这似乎与你所做的不一样。

在围棋操场上看

最新更新