2017-01-31 7 views
-1

Итак, я пытаюсь JSON выдавить словарь, созданный из обработанного CSV в Python.Сериализационный словарь с JSON

Метод создания словаря:

def createUUIDDocIDLink(path): 
    dict = defaultdict 
    with open(path) as citTSV: 
     header = 0 
     for line in csv.reader(citTSV, dialect = "excel-tab"): 
     if header > 0 and line[1] not in dict: 
      dict[line[1]] = [line[0]] 
     elif header > 0 and line[1] in dict: 
      dict[line[1]].append(line[0]) 
     header += 1 
    return dict 

Метод для сбрасывания словаря:

def dumpCreateUUIDDocIDLink(): 
    with open("D:/Coding/FE_InOut/dumpUUIDDocIDLookup",'w') as ULookup: 
     output = json.dump(createUUIDDocIDLink("D:/Coding/FE_InOut/ipcr.tsv"),ULookup) 
    return output 

Ошибка я получаю это:

"поднять TypeError (магнезии (о) +" не является JSON-сериализуемым ")

ТипError: class 'collections.defaultdict' не является JSON se rializable "

Куда я иду не так? Почему я не могу хранить этот dict в памяти? У кого-нибудь есть обходной путь, который я мог бы использовать?

Большое спасибо за ваше время & help, Дайте мне знать, если потребуется дополнительное разъяснение.

+0

Что заставляет вас думать, что что-то пошло не так? –

+0

'json.dump' ничего не возвращает, поэтому присвоить его' output' и вернуть его бесполезно. – Mikk

+0

Вам нужно отступом тело функции. Я предполагаю, что это ошибка копирования, а не в реальном коде. – Barmar

ответ

1

Эта линия:

dict = defaultdict 

неправильно. Чтобы объявить defaultdict, содержащий список, вы должны написать:

dict = defaultdict(list) 

Но вам не нужно deafultdict в любом случае, потому что вы заботитесь о инициализации самостоятельно. Я бы также не использовать dict в качестве имени переменной, так что я бы просто заменить строку с:

mydict = {} 

и убедитесь, что все команды, относящиеся к dict в настоящее время относятся к mydict.

+0

Спасибо за ответ Mikk, я сейчас испытаю наше предложение. – lel23

+0

Привет, ваше предложение сразу сработало - большое спасибо за вашу помощь. – lel23

+0

Добро пожаловать! – Mikk

Смежные вопросы