将有序数据放回字典中

Put ordered data back into a dictionary

我有一个(正常的,无序的)字典来保存我的数据,我将一些数据提取到一个 numpy 数组中来做一些线性代数。完成后,我想将生成的有序 numpy 矢量数据与所有数据一起放回字典中。最好的、最 Pythonic 的方法是什么?

Joe Kington suggests in his answer to "Writing to numpy array from dictionary"认为两种解决方案包括:

  1. 使用Ordered Dictionaries
  2. 将排序顺序存储在另一个数据结构中,例如字典

以下是一些(可能有用的)详细信息:

我的数据在嵌套字典中。外部用于组:{groupKey: groupDict} 和组键从 0 开始并按组总数计数。 groupDict 包含有关项目的信息:(itemKey: itemDict}。itemDict 具有实际数据的键,这些键通常从 0 开始,但可以跳过数字,因为并非所有 "item locations" 都被填充。itemDict 键包括诸如 'name'、'description'、'x'、'y'、...

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

然后我将 x 和 y 等数据放入 numpy 向量和数组中,如下所示:

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

然后我开始做我的线性代数并计算我想添加回 dataDict 的 z 向量。问题是 dataDict 是无序的,所以我没有办法获得正确的索引。

Ordered Dict 方法可以让我知道顺序,然后通过 dataDict 结构进行索引并将数据放回。

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

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

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

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

这两种方法对我来说似乎同样直接。我不确定将 dataDict 更改为有序字典是否会对我的代码中的其他地方产生任何其他影响,但可能不会。添加排序字典似乎也很容易,因为它将与 numpy 数组和向量同时创建。独自一人,我想我会使用 sortingDict 方法。

这些方法中有一种比其他方法好吗?有没有更好的方法我没有想到?我的数据结构对我来说效果很好,但如果有办法改变它以改进其他一切,我愿意接受。

我最终选择了选项 #2,效果很好。