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