Как я могу l oop через этот словарь вместо жесткого кодирования ключей - PullRequest
2 голосов
/ 12 июля 2020

Пока что у меня есть этот код (из cs50 / pset6 / DNA):

import csv

data_dict = {}
with open(argv[1]) as data_file:
    reader = csv.DictReader(data_file)
    for record in reader:
        # `record` is a dictionary of column-name & value
        name = record["name"]
        data = {
            "AGATC": record["AGATC"],
            "AATG": record["AATG"],
            "TATC": record["TATC"],
        }

        data_dict[name] = data

print(data_dict)

Вывод

{'Alice': {'AATG': '8', 'AGATC': '2', 'TATC': '3'},
     'Bob': {'AATG': '1', 'AGATC': '4', 'TATC': '5'},
 'Charlie': {'AATG': '2', 'AGATC': '3', 'TATC': '5'}}

Вот файл csv:

name,AGATC,AATG,TATC
Alice,2,8,3
Bob,4,1,5
Charlie,3,2,5

Но моя цель - добиться того же самого, но вместо жесткого кодирования ключей AATG, et c., А также потому, что я буду использовать гораздо большую базу данных, содержащую больше значений, я хочу иметь возможность l oop через данные вместо этого:

data = {
            "AGATC": record["AGATC"],
            "AATG": record["AATG"],
            "TATC": record["TATC"],
        }

Не могли бы вы мне помочь? Спасибо

Ответы [ 3 ]

2 голосов
/ 12 июля 2020

Вы также можете попробовать использовать pandas.

Используя данные вашего примера в виде файла .csv:

pandas.read_csv('example.csv', index_col = 0).transpose().to_dict()

Вывод:

{'Alice': {'AGATC': 2, 'AATG': 8, 'TATC': 3},
 'Bob': {'AGATC': 4, 'AATG': 1, 'TATC': 5},
 'Charlie': {'AGATC': 3, 'AATG': 2, 'TATC': 5}}

index_col = 0 потому что у вас есть столбец имен, который я установил как индекс (так что позже он станет ключами верхнего уровня в словаре)

.transpose(), поэтому ключи верхнего уровня - это имена, а не функции (AGAT C, AATG, et c.)

.to_dict() преобразовать pandas .DataFrame в python словарь

2 голосов
/ 12 июля 2020

вы можете просто использовать pandas:

import csv
import pandas as pd

data_dict = {}
with open(argv[1]) as data_file:
    reader = csv.DictReader(data_file)
    df = pd.DataFrame(reader)
    df = df.set_index('name') # set name column as index
    data_dict = df.transpose().to_dict() # transpose to make dict with indexes
   
print(data_dict)
2 голосов
/ 12 июля 2020

Вы можете l oop через словарь в python достаточно просто так:

for key in dictionary:
  print(key, dictionary[key])
...