Создание словаря из файла CVS с использованием списков

1

У меня есть файл csv, который содержит четыре столбца и много строк, каждый из которых представляет разные данные, например

OID DID HODIS BEAR

 1  34   67    98

Я уже открыл и прочитал файл csv, однако я не уверен, как сделать каждый столбец ключом. Я считаю, что следующий формат, который я использовал в коде, лучше всего подходит для задачи, которую я создаю.

Пожалуйста, см. Мой код ниже, извините, если объяснение немного запутанно. Обратите внимание, что #Values в столбце 1 - это то, что я застрял, я не уверен, как я могу определить каждый столбец.

for line in file_2:
    the_dict = {}
    OID = line.strip().split(',')
    DID = line.strip().split(',')
    HODIS = line.strip().split(',')
    BEAR = line.strip().split(',')

    the_dict['KeyOID'] = OID
    the_dict['KeyDID'] = DID
    the_dict['KeyHODIS'] = HODIS
    the_dict['KeyBEAR'] = BEAR

    dictionary_list.append(the_dict)

print(dictionary_list)

образ

  • 0
    Начните с разделения строки ... внутри вашего цикла for, выполните line.strip().split(',') . Я думаю, что вы можете забрать оттуда; р
  • 0
    Пожалуйста, не публикуйте код в виде изображений, который делает пользователей неспособными скопировать, для этого вставьте код в сообщение, для этого нажмите «изменить» под сообщением, затем вставьте его ниже, затем выделите его снова, затем нажмите Ctrl + K, или нажмите меню {} stackoverflow
Теги:
list
dictionary
pycharm

3 ответа

0
Лучший ответ

Существует отличная функция Python для строк, которая разделяет строки на основе разделителя .split(delim) где delim является разделителем и возвращает их как список.

Из кода, который вы имеете в вашем скриншоте, вы можете использовать следующий код для разделения на ,, который я принимаю ваш ограничитель, потому что вы сказали, что ваш файл является CSV.

...
for line in file_contents_2:
    the_dict = {}
    values = line.strip().split(',')
    OID = values[0]
    DID = values[1]
    HODIS = values[2]
    BEAR = values[3]
...

Кроме того, если вам понадобится разбить строку на основе пробелов, это аргумент по умолчанию для .split() (аргумент по умолчанию используется, когда аргумент не предоставляется).

  • 0
    спасибо, отлично поработали!
  • 0
    @ Джеймс, не беспокойся! Рад, что это сработало для вас
0

Другой способ сделать это - использовать библиотеки, такие как Pandas, которые являются мощными в работе с табличными данными. Это быстро, поскольку мы избегаем циклов. В приведенном ниже примере вам понадобятся только Pandas и имя файла CSV. Я использовал io только для преобразования строковых данных для имитации csv.

import pandas as pd
from io import StringIO

data=StringIO('''
OID,DID,HODIS,BEAR\n
1,34,67,98''') #mimic csv file

df = pd.read_csv(data,sep=',')

print(df.T.to_dict()[0])

Внизу вам нужен только однострочный, который цепляет команды. Чтение csv, транспонирование и преобразование в словарь:

import pandas as pd
csv_dict = pd.read_csv('mycsv.csv',sep=',').T.to_dict()[0]
0

Я бы сказал, что это целый код:

lod = []
with open(file,'r') as f:
   l=f.readlines()
   for i in l[1:]:
      lod.append(dict(zip(l[0].rstrip().split(),i.split())))

split не нужен параметр, просто используйте простой для цикла with open, не нужно знать ключи

И если заботиться о пустых словарях:

lod=list(filter(None,lod))
print(lod)

Выход:

[{'OID': '1', 'DID': '34', 'HODIS': '67', 'BEAR': '98'}]

Если хотите целые числа:

lod=[{k:int(v) for k,v in i.items()} for i in lod]
print(lod)

Выход:

[{'OID': 1, 'DID': 34, 'HODIS': 67, 'BEAR': 98}]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню