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号方案,而且效果很好。