Найти - Пользователи
Полная версия: В чем лучше хранить данные?
Начало » Python для новичков » В чем лучше хранить данные?
1
Newbie_II
Я не программист. Немного знаю Delphi и Pascal. Хочу решить следующую задачу. Мне нужно автоматизировать процесс в браузерной игре. Для этого, я составил небольшую таблицу со списком команд, временем выполнения и номером объекта для применения команды. Типа такой:
--------------
i | t | o | a
0 | 1 | 2 | 1
1 | 5 | 2 | 2
2 | 7 | 3 | 1
Поле (i) – порядковый номер. (t) – время в секундах от начала процесса, (o) – номер объекта, на котором применять действие, (a) – тип действия.

Соответственно, нужно идти подряд по списку и выполнять эти комманды по мере того, как таймер дойдет до нужной секунды.
Если бы я писал на delphi я бы не заморачивался и сделал примерно так:
type
myRec=record
cTime:integer;
cObj:integer;
cAction:integer;
end;
const
cList:array [0..2] of myRec=
((cTime:1;cObj:2;cAction:1),
(cTime:5;cObj:2;cAction:2),
(cTime:7;cObj:3;cAction:1));

begin
cTimer:=0;

for i:=0 to 2 do
begin
while true do
begin
if cList[i].cTime>cTimer
then
doAction(cList[i].cObj,cList[i].cAction);
break;
end; //while
doSomeChecking;
cTimer:=GetNewTime;
end; //for
Но в той штуке, которую я использую для автоматизации (sikuli) встроен jpython. Соответственно вопрос:
Как правильно с точки зрения пайтона реализовать подобный алгоритм?
Вроде больше всего похоже, что данные нужно в словаре хранить:
cList={[(cTime:1;cObj:2;cAction:1],
[cTime:5;cObj:2;cAction:2],
[cTime:7;cObj:3;cAction:1]};
Но как реализовать порядок записей и проход по ним по порядку? Вроде массивов в пайтоне нет?

Или вообще в данном случае есть какое-то простое красивое решение о котором я не догадываюсь?
ZerG
Вам совершенно не обязательно хранить в словаре ключи и значения в определенном порядке! Достаточно в определенном порядке их опрашивать.

Кроме того для питона есть и словари - можете погуглить
doza_and
Newbie_II
Вроде массивов в пайтоне нет?
ZerG
есть и словари
Наверное имелось ввиду в пайтоне и массивы есть
Newbie_II
ZerG
… Достаточно в определенном порядке их опрашивать. …
и что же может задать этот порядок опроса? Как мне из словаря вытащить, например, 5-ю по счету запись?
4kpt_IV
В словаре нет “пятой по счету записи”. Считайте словарь хешируемой таблицей где нет позиции, а есть просто ключ-значение. Если Вы хотите хранить позиционно и при этом использовать доступ по ключам то есть 2 варианта:
1. Написать свой класс, который был бы наследником dict, но при этом хранил еще последовательность элементов.
2. Расширить ordereddict (модель collections) добавив к нему методы для работы по индексам.
doza_and
А что мешает мам далеть так как вы написали:
Newbie_II
нужно идти подряд по списку и выполнять эти комманды

i =0; t=1;o =2;a=3
cmd=
[[0 , 1 , 2 , 1],
[0 , 1 , 2 , 1],
[0 , 1 , 2 , 1]]
for j in cmd:
   print(j[a])

или как вы сделали в паскале
class Ta:
   def  __init__(self,li):
       self.i,self.j,self.k,self.y=li
cmd=map(Ta,
[[0 , 1 , 2 , 1],
[0 , 1 , 2 , 1],
[0 , 1 , 2 , 1]])
for j in cmd:
   print(j.a)
ZerG
arr = {
    0: {'i': 10, 't': 20, 'o': 30, 'a': 40},
    1: {'i': 100, 't': 200, 'o': 300, 'a': 400}
}
print arr[0]
# {'i': 10, 'a': 40, 't': 20, 'o': 30}
print arr[0]['i']
# 10
print arr[0]['t']
# 20
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB