Как прочитать 2d-словарь из csv-файла?

#python #csv #dictionary

#python #csv #словарь

Вопрос:

У меня есть CSV-файл, и я хочу прочитать файл, чтобы создать 2d-словарь.

Я попытался создать новый словарь:

 f = csv.reader(open('test.csv', 'r'))
for row in f:
    k, v, p  = row 
    markovTransition[k] = {v: p}
 

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

Файл CSV имеет формат:

 A,A1,3
A,A2,4
B,B1,6
C,C3,7
C,C2,3
C,C5,1
 

Требуемый словарь:

 {A: {A1: 3, A2: 4}, B: {B1: 6}, C: {C3: 7, C2: 3, C5: 1}
 

Текущий словарь:

 {A: {A2: 4}, B: {B1: 6}, C{C5: 1}}
 

Как мне создать 2d-словарь из CSV-файла? Спасибо.

Ответ №1:

Это хороший вариант использования для defaultdict:

 markovTransition=collections.defaultdict(dict)
f = csv.reader(open('test.csv', 'r'))
for row in f:
    k, v, p  = row 
    markovTransition[k][v] = p
 

Ответ №2:

попробуйте это:

 markovTransition = {}
f = csv.reader(open('test.csv', 'r'))
for row in f:
    k, v, p  = row

    if k in markovTransition.keys():  # Check if already exists and then push it.
        markovTransition[k].update({v: p})
    else:
        markovTransition[k] = {v: p}