If you iterate through the keys in a map, you're guaranteed to see each key once, but the order isn't specified. Instead of accessing them by index, you can put the "keys of map as list" block into a loop block. If you want an index as well, you can have an independently incrementing attribute for each loop iteration.
set [loop count] to 0
for each [item] in [keys of map as list]
set [map value] to [get [key] from [map]]
... do something with "key", "map value", and "loop count"
increment [loop count] by 1
Alternatively, if you call the "keys of map as list" block multiple times without making any changes to the map, I believe it will also return keys in the same order. Or you could store the result of that block in a list, which wouldn't change even if you modified the map.