关于python:将有序数据放回字典

Put ordered data back into a dictionary

我有一本(普通的,无序的)字典,它保存着我的数据,我把一些数据提取到一个麻木的数组中,做一些线性代数。完成后,我想将生成的有序numpy向量数据与所有数据一起放回字典中。做这个的最好的,最Python的方法是什么?

JoeKington在他对"从字典中写入numpy数组"的回答中建议两种解决方案包括:

  • 使用有序字典
  • 将排序顺序存储在另一个数据结构中,如字典
  • 以下是一些(可能有用的)细节:

    我的数据在嵌套字典中。外部用于组:groupkey:groupdict和组键,从0开始,按组总数进行计数。groupdict包含有关项的信息:(itemkey:itemdict)。itemdict具有用于实际数据的键,这些键通常从0开始,但可以跳过数字,因为并非所有"项位置"都已填充。itemdict键包括"name"、"description"、"x"、"y"、…

    获取数据很容易,字典很棒:数据[groupkey][itemkey]['x']=0.12

    然后我把x和y这样的数据放到一个numpy向量和数组中,如下所示:

    1
    2
    3
    4
    5
    6
     xVector = numpy.empty( xLength )
     vectorIndex = 0
     for groupKey, groupDict in dataDict.items()
          for itemKey, itemDict in groupDict.items()
               xVector[vectorIndex] = itemDict['x']
               vectorIndex += 1

    然后我去做我的线性代数,计算一个z向量,我想把它加回到datadict中。问题是datadict无序,所以我没有任何方法获得正确的索引。

    ordered dict方法允许我知道顺序,然后通过data dict结构进行索引,并将数据放回。

    或者,我可以在上面的内部for循环中创建另一个字典,存储vectorindex、groupkey和itemkey之间的关系:

    1
    2
     sortingDict[vectorIndex]['groupKey'] = groupKey
     sortingDict[vectorIndex]['itemKey'] = itemKey

    稍后,当需要返回数据时,我可以循环遍历向量并添加数据:

    1
    2
    3
     vectorIndex = 0
     for z in numpy.nditer(zVector):
          dataDict[sortingDict[vectorIndex]['groupKey']][sortingDict[vectorIndex]['itemKey']]['z'] = z

    这两种方法在我看来都是直截了当的。我不确定将datadict更改为有序字典是否会在我的代码中的其他地方产生任何其他影响,但可能不会。添加排序字典似乎也很容易,因为它将与numpy数组和向量同时创建。我想我会用排序口述法。

    这些方法中的一种比其他方法更好吗?有没有更好的方法我不想?我的数据结构对我来说工作得很好,但是如果有方法可以改变它来改进其他的东西,我会接受的。


    我最终选择了2号方案,而且效果很好。