Как я могу создать вложенный словарь, содержащий информацию. из файла csv - PullRequest
0 голосов
/ 11 июля 2020

Я работаю над cs50 pset6, DNA, и я хочу прочитать файл csv, который выглядит следующим образом:

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

И я хочу создать вложенный словарь, который будет выглядеть так: это:

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

Итак, я хочу использовать это:

with open(argv[1]) as data_file:
    for i in data_file:

(или другой вариант) в l oop через файл csv и append в словарь добавление всех значений, чтобы у меня была база данных, к которой я смогу позже получить доступ.

Ответы [ 2 ]

3 голосов
/ 11 июля 2020

Вы должны использовать python s csv.DictReader module

import csv

data_dict = {}
with open(argv[1]) as data_file:
    reader = csv.DictReader(data_file)
    for record in reader:
        # `record` is a OrderedDict (type of dict) of column-name & value.
        # Instead of creating the data pair as below:
        # ```
        # name = record["name"]
        # data = {
        #     "AGATC": record["AGATC"],
        #     "AATG": record["AATG"],
        #     "TATC": record["TATC"],
        #     ...
        # }
        # data_dict[name] = data
        # ```
        # you can just delete the `name` column from `record`
        name = record["name"]
        del record["name"]
        data_dict[name] = record

print(data_dict)
1 голос
/ 11 июля 2020

Использование простого чтения файла

with open(argv[1], 'r') as data_file:
  line = next(data_file)          # get the first line from file (i.e. header)
  hdr = line.rstrip().split(',')  # convert header string to comma delimited list
                                  # ['name', 'AGATC', 'AATG', 'TATC']
  
  data_dic = {}
  for line in data_file:
    line = line.rstrip().split(',')
    # name and dictionary for current line
    data_dic[line[0]] = {k:v for k, v in zip(hdr[1:], line[1:])}

print(data_dic)

Вывод

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