golang 像 python 一样定义 dict 并将值附加到 dict 中的列表
golang defining dict like python with and appending value to list in dict
我是新手,正在尝试实现 python 如下所示的嵌套结构,我无法在 golang 中定义可以包含特定 [=15= 列表的空 dict/map ] 并且在遍历数据时我无法在 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{}},
..但这似乎与您所做的不一样。
我是新手,正在尝试实现 python 如下所示的嵌套结构,我无法在 golang 中定义可以包含特定 [=15= 列表的空 dict/map ] 并且在遍历数据时我无法在 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{}},
..但这似乎与您所做的不一样。