索引从右到左而不是从左到右的Python



我写了一个应用程序。目标是从这个字典中读取数据(它是一个字典,因为我在它里面有更多的列表,但是它们与这个问题无关,所以我把它们剪掉了):

initialDictionary = {
"xCoordinate": [2, 4, 6, 3, 6],
}
如前所述,xCoordinate 6是一个副本,所以我这样做:
affectedCoordinates = list(set(initialDictionary["xCoordinate"]))

这将产生一个新的列表,但是没有重复列表。

[2, 3, 4, 6]

现在我想找到每个项目的索引(位置)的affectedCoordinates在原来的initialDictionary,我已经这样做了:

for affectedCoordinate in (affectedCoordinates):
if affectedCoordinate in initialDictionary["xCoordinate"]:
print(initialDictionary["xCoordinate"].index(affectedCoordinate))

然而,这是从左到右读取initialDictionary中的原始列表,所以它输出:

03.12

这是错误的。我想要initialDictionary列表中最右边的任何副本的索引(从右向左读取,而不是从左向右)。所以应用程序应该打印如下内容:

03.14

这是我的全部代码:

initialDictionary = {
"xCoordinate": [2, 4, 6, 3, 6],
"state": [1, 1, 1, 1, 0]
}

affectedCoordinates = list(set(initialDictionary["xCoordinate"]))
print(initialDictionary["xCoordinate"])
print(affectedCoordinates)

for affectedCoordinate in (affectedCoordinates):
if affectedCoordinate in initialDictionary["xCoordinate"]:
print(initialDictionary["xCoordinate"].index(affectedCoordinate))

使用enumerate和字典推导式创建一个助手dict:

index = {x: i for i, x in enumerate(initialDictionary["xCoordinate"])}

这将存储每个唯一值的最后一个索引。然后您可以像使用索引函数一样使用它:

for ac in affectedCoordinates:
print(index[ac])

您应该使用不同的方法。使用集合会使初始数据失去任何顺序,而使用index会使整个过程约为O(n^2)。

您可以简单地构建一个dict,将值作为键,并使用每个值的最后一个索引。可以简单地输入:

data = [2, 4, 6, 3, 6]
index_of_last = dict((val, index) for index, val in enumerate(data))
print(index_of_last)
# {2: 0, 4: 1, 6: 4, 3: 3}

您可以通过获取该字典的键和值来分别获得值和索引:

print(index_of_last.keys())
print(index_of_last.values())
#dict_keys([2, 4, 6, 3])
#dict_values([0, 1, 4, 3])

最新更新