Python - создание словаря файла csv, который собирает все значения с одним и тем же ключом без использования каких-либо модулей

привет, я прошел курс по Python для биологов, и у меня было как использовать файлы csv, и я застрял в последнем вопросе о создании словаря из файлов csv с помощью ключи в виде кортежей (c, b), а значения представляют собой списки кортежей всех значений (first, Finish, Fix/Ext), которые имеют одинаковые значения c, b. csv выглядит так:

N,c,g,b,first,finish,fix/ext
1000,1.0,0.02,3.0,602,1661,0
1000,0.8,0.02,3.0,42,911,0
1000,1.0,0.02,3.0,945,2164,0
1000,1.0,0.02,3.0,141,954,0

результат должен выглядеть так:

: {(1, 3) : [(602, 1661, 0), (945, 2164, 1), (687, 716, 1)], (1, 1.5) : [(35, 287, 0), (803, 1402, 0), …], …}

на данный момент мне удалось сделать это:

def read_results(full_file_path):
    csv_dict = {}
    with open(full_file_path,'r') as t:
        table = t.readlines()[1:]
        for line in table:
            line = line.replace('\n', '')
            line = line.split(',')
            csv_dict[line[0]] = line[1:]
            print(csv_dict)

что дает мне это:

{'1000': ['1.0', '0.02', '3.0', '602', '1661', '0']}

но не могу понять, как это сделать с нужными мне ключами и как поместить в кортежи списки всех соответствующих значений

о, и я не могу использовать импорт csv или другой импорт

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы почти закончили, осталось только установить, какие будут ваши ключи и каковы ваши значения. Здесь я написал код, который его завершает:

def read_results(full_file_path):
    csv_dict = {}
    with open(full_file_path,'r') as t:
        table = t.readlines()[1:]
        for line in table:
            line = line.replace('\n', '')
            line = line.split(',')
            line = list(map(float, line)) # optional, if you want to have numbers as floats and not strings
            '''
            line[1] - c
            line[3] - b
            KEY: (c,b) - tuple of c and b 
            TUPLE OF CORRESPONDING VALUES: (line[4], line[5], line[6]) - tuple of first, finish, fix/ext 
            '''
            key = (line[1],line[3])
            if key in csv_dict:
                # append a new value if key is already in the dict
                csv_dict[key].append((line[4], line[5], line[6]))
            else:
                # create a new value by the key if it is not in the dict
               csv_dict[key] = [(line[4], line[5], line[6])] 
    return csv_dict
        
dict = read_results("file.csv")
print(dict)
# try to get the values of dict by some value:
key = (1.0, 3.0) #key = ("0.8", "3.0") if strings were not converted to floats
print(dict[key])

Надеюсь, я сделал это понятным с соответствующими комментариями. Если у вас есть еще вопросы - пишите, я постараюсь на них ответить.

Спасибо, чувак, это очень помогло, я сильно застрял на этом. теперь мне нужно понять, как использовать этот словарь для создания собственного csv, который вычисляет среднее значение каждой строки значения следующим образом: py c b first finish fix/ext 1 3 744.67 1513.67 0.67 0.8 3 88 858.67 0.67 0.8 1.5 301.5 984.5 0.5 1 1.5 419 844.5 0

Rimidelo 19.03.2022 19:07

Привет, я уже ответил тебе в новом вопросе, который ты создал :)

mackostya 19.03.2022 20:13

Другие вопросы по теме