golang在di中定义dict-like-python并将值附加到list

2024-10-02 08:24:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的,并且尝试实现如下的类似python的嵌套结构,我无法在golang中定义空的dict/map,它可以包含特定struct/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]}

Tags: objmapitemsitem结构dictitem1item2
1条回答
网友
1楼 · 发布于 2024-10-02 08:24:50

不太干净。。但这大致符合您的需要,并应使您开始走上正确的道路:

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)
}

输出:

^{pr2}$

主要区别是。。您不能初始化map使用已经存在的键来改变一个项(就像您在示例中所做的那样,在初始化过程中附加了item1)。所以在初始化映射之后,这是一个额外的步骤。你可以一直这样做:

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

。。但这和你当时做的不一样。在

See it on the Go playground

相关问题 更多 >

    热门问题