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

时间:2015-02-20 10:10:22

标签: python data-structures struct go

我是新手去尝试像嵌套结构一样实现python如下所示,我无法在golang中定义空的dict / map,它可以包含特定struct / classobj的列表,并且在迭代数据时我不是能够在地图/字典中附加项目...我将非常感谢您的任何帮助......谢谢

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

1 个答案:

答案 0 :(得分:2)

它不太干净......但这大致与你想要的一样,应该让你开始走上正确的道路:

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{}},

..但这似乎与你正在做的不一样。

See it on the Go playground