【问题标题】:golang defining dict like python with and appending value to list in dictgolang定义像python一样的dict并将值附加到dict中的列表
【发布时间】:2015-02-20 10:10:21
【问题描述】:

我是新手,试图实现如下嵌套结构的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]}

【问题讨论】:

标签: python data-structures struct go


【解决方案1】:

它不是很干净......但这大致可以满足您的需求,并且应该让您走上正确的道路:

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

【讨论】:

  • 在遍历项目时,你想检查键是否存在于rector中,在这种情况下,做一个追加而不是赋值
  • 好点.. 必须跳过这一点。尴尬的。我会解决的。
  • @Aedil 我已经更新了我的答案。现在注意循环中的append 操作。很抱歉错过了重要的部分:/
  • @Aedil 另一种方法是:play.golang.org/p/PLK2YV-vNV
猜你喜欢
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2022-06-17
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多