python - golang 像 python 一样定义 dict,并将值附加到 dict 中的列表

标签 python data-structures struct go

我是新手,正在尝试实现如下所示的类似 python 的嵌套结构,我无法在 golang 中定义空字典/映射,它可以包含特定结构/类对象的列表,并且在遍历数据时我不是能够在 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:[{}]]

主要区别是..你不能初始化 map 用一个已经存在的键改变一个项目(就像你在你的例子中用item1 在初始化期间附加)。所以这成为 map 初始化后的一个额外步骤。你总是可以这样做:

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

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

See it on the Go playground

关于python - golang 像 python 一样定义 dict,并将值附加到 dict 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28626382/

相关文章:

python,你不能使用8位字节串

python - 使用列表作为列表框变量而不是元组

通过 C 中的 SO 更改内存中的值

C Big Endian 到 Little Endian 结构

arrays - Golang - 结构、初始化和 memcpy - 什么是正确的方法?

python - Matplotlib 窗口大小、标题等

python - 如何生成PDF索引页?

java - 在java中表示二维球堆

c# - .NET 中的随机和线程问题

c++ - BFS 实现