Рекурсивно добавлять каждую запись из словаря для получения значений - PullRequest
1 голос
/ 22 мая 2019

После моего вопроса, представленного в последние несколько дней, у меня есть defaultdict, который содержит в каждой из строк запись продажи билета для идентификатора устройства или пассажира для продажи автобуса.Весь devicedict содержит все билеты, проданные за данный год, около 1 миллиона. Дефолт по умолчанию индексируется идентификатором устройства, который является ключом.Мне нужно знать среднюю задержку между датой покупки и фактической датой отправления для каждой покупки билета.Моя проблема в том, что я не могу извлечь каждую запись из словаря.

Так что devicedict содержит для каждого ключа devicedict [ключ] список из более чем 60 различных характеристик: date_departure, date_arrival и т. Д. В каждом поворотецикл, в котором я хочу обработать что-то вроде devicedict [deviceID] [область интересов], сделать что-то с ним и, например, извлечь среднюю задержку между каждой покупкой.

Я пытался использовать append и использовать вложенные массивы, но она не возвращает каждую отдельную запись сама по себе.

ValoresDias - это сумма задержек для каждого билета (дата покупки минус вылет) в секундах, деленная на day-86400, а ValoresTotalesDias - просто переменная приращения.Общая медианная задержка должна быть ValoresDias / ValoresTotalesDias для всех записей.

with open('Salida1.csv',newline='', mode='r') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    #rows1 = list(csv_reader)
    #print(len(rows1))
    line_count = 0
    count=0
    for row in csv_reader:
        key = row[20]
        devicedict[key].append(row)
        if line_count == 0:
            print(f'Column names are {", ".join(row)}')
            line_count += 1

        else:
            #print(f'\t{row[0]} works in the {row[20]} department, and was born in {row[2]}.')
            #print(row['id'], row['idapp'])
            #print(len(row))
            #print(list(row))
            mydict5ordenado.append(list(row))
            line_count += 1
    print(len(devicedict.keys())) 




f = "%Y-%m-%d %H:%M:%S"
p = devicedict.keys()
 for i in range(0,len(devicedict)):
        mydict.append(devicedict[list(p)[i]])
        print(mydict[i])
        print("Los campos temporales:")
        #print(mydict[i][4])
        #print(mydict[i][3])
        out1=datetime.datetime.strptime(mydict[i][4], f)
        out2=datetime.datetime.strptime(mydict[i][3], f)    
        out3=out1-out2
        valoresTotalesDias+=1
        valoresDias+=out3.seconds/86400 

       #This is what i am trying to obtain for each record without  hardcoding
       #I want to access each field in the above loop
       count1=len(devicedict['4ff70ad8e2e74f49'])
       for i  in range(0,count1):
       mydict5.append(devicedict['4ff70ad8e2e74f49'][i])
       print(len(mydict5))    
       for i in range (0,len(mydict5)):
         print(mydict5[i][7])
         print("Tipo de Bus:")
         print(mydict5[i][16])
         print(mydict5[i][14])
         if (mydict5[i][16]=='P'):
            preferente+=1


Mydict [i] должен содержать только одну строку записи, то есть одну продажу для каждого пассажира, а не всю запись.

...