我是新手去尝试像嵌套结构一样实现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]}
答案 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{}},
..但这似乎与你正在做的不一样。