Как подытожить значение словаря при одинаковом значении - PullRequest
0 голосов
/ 09 июля 2019

Итак, я пишу некоторый код на python 3.6, у меня есть словарь, я хочу суммировать output_jam и output_ot, если 'jam' и 'cell' имеют одинаковое значение. это мой код любой может помочь мне исправить мой код

data = {
    1: {'cell_1': ['13a'], 'jam_1': ['07-08'], 'model_1': ['SUPERSTAR'], 'output_1': ['10'], 'output_jam_1': [''],
        'time_1': [''], 'output_ot_1': [''], 'time_ot_1': ['']}
    ,
    2: {'cell_2': ['13a'], 'jam_2': ['07-08'], 'model_2': ['SUPERSTAR'], 'output_2': ['20'], 'output_jam_2': [''],
        'time_2': [''], 'output_ot_2': [''], 'time_ot_2': ['']}
    ,
    3: {'cell_3': ['13a'], 'jam_3': ['07-08'], 'model_3': ['SUPERSTAR'], 'output_3': ['40'], 'output_jam_3': [''],
        'time_3': [''], 'output_ot_3': [''], 'time_ot_3': ['']}
    ,
    4: {'cell_4': ['13b'], 'jam_4': ['08-09'], 'model_4': ['SUPERSTAR'], 'output_4': ['30'], 'output_jam_4': [''],
        'time_4': [''], 'output_ot_4': [''], 'time_ot_4': ['']}
    ,
    5: {'cell_5': ['13d'], 'jam_5': ['16-17'], 'model_5': ['SUPERSTAR'], 'output_5': ['40'], 'output_jam_5': [''],
        'time_5': [''], 'output_ot_5': [''], 'time_ot_5': ['']}
    ,
    6: {'cell_6': ['13d'], 'jam_6': ['16-17'], 'model_6': ['SUPERSTAR'], 'output_6': ['40'], 'output_jam_6': [''],
        'time_6': [''], 'output_ot_6': [''], 'time_ot_6': ['']}
    ,
    7: {'cell_7': ['13d'], 'jam_7': ['16-17'], 'model_7': ['SUPERSTAR'], 'output_7': ['10'], 'output_jam_7': [''],
        'time_7': [''], 'output_ot_7': [''], 'time_ot_7': ['']}
    ,
    8: {'cell_8': ['13d'], 'jam_8': ['18-19'], 'model_8': ['SUPERSTAR'], 'output_8': ['60'], 'output_jam_8': [''],
        'time_8': [''], 'output_ot_8': [''], 'time_ot_8': ['']}
    , }

output_ = 'output_'
output_jam_ = 'output_jam_'
output_ot_ = 'output_ot_'
time_ = 'time_'
time_ot_ = 'time_ot_'
cell_ = 'cell_'
jam_ = 'jam_'
cek_jam = [['16-17'], ['17-18'], ['18-19']]


for i in range(1, len(data) + 1, 1):
    cek_data_cell = data[i][cell_ + str(i)]
    cek_data_jam = data[i][jam_ + str(i)]
    for ii in range(1, len(data) + 1, 1):
        for iii in range(1, len(data) +1, 1):
            if data[i] != data[ii] and data[ii] != data[iii]:
                if cek_data_cell == data[ii][cell_ + str(ii)] == data[iii][cell_+str(iii)]  and cek_data_jam == data[ii][jam_ + str(ii)] == data[iii][jam_ + str(iii)]:
                    if cek_data_jam not in cek_jam:
                        data[i][output_jam_ + str(i)] = [str(int(data[i][output_ + str(i)][0]) + int(data[ii][output_ + str(ii)][0])+ int(data[iii][output_ + str(iii)][0]))]
                    else:
                        data[i][output_ot_ + str(i)] = [str(int(data[i][output_ + str(i)][0]) + int(data[ii][output_ + str(ii)][0])+ int(data[iii][output_ + str(iii)][0]))]
                elif cek_data_cell == data[ii][cell_ + str(ii)] and cek_data_jam == data[ii][jam_ + str(ii)]:
                    if cek_data_jam not in cek_jam:
                        data[i][output_jam_ + str(i)] = [str(int(data[i][output_ + str(i)][0]) + int(data[ii][output_ + str(ii)][0]))]
                    else:
                        data[i][output_ot_ + str(i)] = [str(int(data[i][output_ + str(i)][0]) + int(data[ii][output_ + str(ii)][0]))]
                elif cek_data_cell== data[iii][cell_+str(iii)]  and cek_data_jam == data[iii][jam_ + str(iii)]:
                    if cek_data_jam not in cek_jam:
                        data[i][output_jam_ + str(i)] = [str(int(data[i][output_ + str(i)][0]) + int(data[iii][output_ + str(iii)][0]))]
                    else:
                        data[i][output_ot_ + str(i)] = [str(int(data[i][output_ + str(i)][0]) + int(data[iii][output_ + str(iii)][0]))]
            else:
                if cek_data_jam in cek_jam:
                    if data[i][output_ot_ + str(i)] == ['']:
                        data[i][output_ot_ + str(i)] = data[i][output_ + str(i)]
                else:
                    if data[i][output_jam_ + str(i)] == ['']:
                        data[i][output_jam_ + str(i)] = data[i][output_ + str(i)]
    try:
        data[i][time_ + str(i)] = [
            str(round(int(data[i][output_ + str(i)][0]) / int(data[i][output_jam_ + str(i)][0]), 2))]
    except:
        pass
    try:
        data[i][time_ot_ + str(i)] = [
            str(round(int(data[i][output_ + str(i)][0]) / int(data[i][output_ot_ + str(i)][0]), 2))]
    except:
        pass

for i in data:
    print (data[i])

это результат ошибки, потому что правильное значение в output_jam_1 равно 70 (10 + 20 + 40), а не 50. правильное значение в output_jam_2 равно 70 (10 + 20 + 40), а не 60. правильное значение в output_jam_3 равно 70 (10+ 20 + 40) не 80

{'cell_1': ['13a'], 'jam_1': ['07-08'], 'model_1': ['SUPERSTAR'], 'output_1': ['10'], 'output_jam_1': ['50'], 'time_1': ['0.2'], 'output_ot_1': [''], 'time_ot_1': ['']}
{'cell_2': ['13a'], 'jam_2': ['07-08'], 'model_2': ['SUPERSTAR'], 'output_2': ['20'], 'output_jam_2': ['60'], 'time_2': ['0.33'], 'output_ot_2': [''], 'time_ot_2': ['']}
{'cell_3': ['13a'], 'jam_3': ['07-08'], 'model_3': ['SUPERSTAR'], 'output_3': ['40'], 'output_jam_3': ['80'], 'time_3': ['0.5'], 'output_ot_3': [''], 'time_ot_3': ['']}
{'cell_4': ['13b'], 'jam_4': ['08-09'], 'model_4': ['SUPERSTAR'], 'output_4': ['30'], 'output_jam_4': ['60'], 'time_4': ['0.5'], 'output_ot_4': [''], 'time_ot_4': ['']}
{'cell_5': ['13d'], 'jam_5': ['16-17'], 'model_5': ['SUPERSTAR'], 'output_5': ['40'], 'output_jam_5': [''], 'time_5': [''], 'output_ot_5': ['50'], 'time_ot_5': ['0.8']}
{'cell_6': ['13d'], 'jam_6': ['16-17'], 'model_6': ['SUPERSTAR'], 'output_6': ['40'], 'output_jam_6': [''], 'time_6': [''], 'output_ot_6': ['50'], 'time_ot_6': ['0.8']}
{'cell_7': ['13d'], 'jam_7': ['16-17'], 'model_7': ['SUPERSTAR'], 'output_7': ['10'], 'output_jam_7': [''], 'time_7': [''], 'output_ot_7': ['20'], 'time_ot_7': ['0.5']}
{'cell_8': ['13d'], 'jam_8': ['18-19'], 'model_8': ['SUPERSTAR'], 'output_8': ['60'], 'output_jam_8': [''], 'time_8': [''], 'output_ot_8': ['120'], 'time_ot_8': ['0.5']}

Может ли быть достигнут тот же код простым и лучшим способом? мои ожидаемые и фактические результаты,

{'cell_1': ['13a'], 'jam_1': ['07-08'], 'model_1': ['SUPERSTAR'], 'output_1': ['10'], 'output_jam_1': ['70'], 'time_1': ['0.33'], 'output_ot_1': [''], 'time_ot_1': ['']}
{'cell_2': ['13a'], 'jam_2': ['07-08'], 'model_2': ['SUPERSTAR'], 'output_2': ['20'], 'output_jam_2': ['70'], 'time_2': ['0.5'], 'output_ot_2': [''], 'time_ot_2': ['']}
{'cell_3': ['13a'], 'jam_3': ['07-08'], 'model_3': ['SUPERSTAR'], 'output_3': ['40'], 'output_jam_3': ['70'], 'time_3': ['0.5'], 'output_ot_3': [''], 'time_ot_3': ['']}
{'cell_4': ['13b'], 'jam_4': ['08-09'], 'model_4': ['SUPERSTAR'], 'output_4': ['30'], 'output_jam_4': ['30'], 'time_4': ['0.5'], 'output_ot_4': [''], 'time_ot_4': ['']}
{'cell_5': ['13d'], 'jam_5': ['16-17'], 'model_5': ['SUPERSTAR'], 'output_5': ['40'], 'output_jam_5': [''], 'time_5': [''], 'output_ot_5': ['90'], 'time_ot_5': ['0.8']}
{'cell_6': ['13d'], 'jam_6': ['16-17'], 'model_6': ['SUPERSTAR'], 'output_6': ['40'], 'output_jam_6': [''], 'time_6': [''], 'output_ot_6': ['90'], 'time_ot_6': ['0.8']}
{'cell_7': ['13d'], 'jam_7': ['16-17'], 'model_7': ['SUPERSTAR'], 'output_7': ['10'], 'output_jam_7': [''], 'time_7': [''], 'output_ot_7': ['90'], 'time_ot_7': ['0.5']}
{'cell_8': ['13d'], 'jam_8': ['18-19'], 'model_8': ['SUPERSTAR'], 'output_8': ['60'], 'output_jam_8': [''], 'time_8': [''], 'output_ot_8': ['60'], 'time_ot_8': ['0.5']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...