【问题标题】:python data structure: map<string, vector<int>>python数据结构:map<string, vector<int>>
【发布时间】:2016-11-26 03:18:44
【问题描述】:

很抱歉问这个新手问题。

在 C++ 中,我可以有这样的东西:

map<string, vector<int>> m
m["A1"].push_back(1); 
m["A1"].push_back(2); 
m["B3"].push_back(3); //etc

问题是我想用 mathplot 把它画出来。每个向量将根据其字符串值“A1”、“B3”等进行排序。

我可以在 python 中实现类似的东西吗? 请注意,我将不得不使用 mathplot 进行绘图。所以访问向量应该很容易。

【问题讨论】:

    标签: python c++ dictionary vector jmathplot


    【解决方案1】:

    使用Dict

    m = {"A1" : [], "B3" : []}
    m["A1"].append(1)
    m["A1"].append(2)
    m["B3"].append(3)
    

    请注意,您需要先在字典中插入key,否则会显示KeyError。如果你想添加一个新的key,在这里假设"A2",只需这样做:

    m["A2"] = []
    

    要根据字典的键对字典进行排序,请使用OrderedDict

    m = OrderedDict(sorted(m.items(), key = lambda t : t[0]))
    

    还有一件事,在python字典中只允许使用keys作为keys的不可变项,如list,就像[1,2,3]一样一把钥匙。

    【讨论】:

      【解决方案2】:

      在 Python 中,hashmap 的等价物是 Dict(事实上,Dict 的大多数实现都是 hashmaps)。为确保跨实现排序,您将需要使用OrderedDictList 等价于向量。因此,您想要的是ListsOrderedDict

      from collections import OrderedDict
      
      // Create the dictionary
      d = {'A1': [1, 2], 'B2': [2, 3]}
      
      // Order it by key
      m = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
      
      // Example of appending to one of the lists
      m['A1'].append(3)
      
      print(m)
      

      这将打印:

      OrderedDict([('A1', [1, 2, 3]), ('B2', [2, 3])])
      

      您还可以添加包含这样的列表的其他键:

      m["B2"] = [2, 3, 5, 7]
      

      然后您需要重新排序OrderedDict

      小提示:Python 中的Dicts 没有排序;它们碰巧在非常新的 CPython 3 版本中订购,但这是一个实现细节。因此,OrderedDict 是这里最适用的数据结构,以确保您的代码是可移植的。我之所以提到这一点,是因为很多人对 CPython 的这个特性感到非常兴奋,但不能保证它在任何地方都能工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多