

Python初心者のため、無礼な質問かも知れませんがご教示ください。

Pythonで以下のようなcsvファイルからデータを読み込む方法を考えています。

**CSV**

[code]

    A C D T
    1,7 0 0 2
    2,7 0 0 3
    3,7 0 0 5
    4,7 0 0 2
    5,7 0 0 3
    6,7 0 0 5
    0,1 8 10 2
    0,2 70 15 3
    0,3 9 10 5
    0,5 5 10 2
    1,2 10 15 3
    1,3 90 10 5
    2,3 120 10 2
    2,4 85 15 3
    3,4 7 15 5
    5,4 150 15 2
    5,6 11 15 3
    6,2 140 15 5
    6,4 130 15 2
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/PUFvZ.png)](https://i.stack.imgur.com/PUFvZ.png)

上の画像のように読み込ませることを目標にしています。  
CSVファイルから列を指定して、1列目のみをlist型に、１列目のタプルと２列目をDict型、１列目のタプルと３列目をDict型、１列目のタプルと４列目をDict型、で読み込ませようと実装してみたのですが、上手くできませんでした。

**Python**

[code]

    import csv
    
    A=[]
    C={}
    D={}
    T={}
    
    with open('/Users/data.csv') as f:
        r = csv.reader(f)
        next(r)
        A=[tuple(map(int,line)) for line in r]
    
        reader = csv.DictReader(f, delimiter=' ')
        for row in reader:
            C[tuple([int(s) for s in row[1].split(',')])] = int(row['C'])
            D[tuple([int(s) for s in row[1].split(',')])] = int(row['D'])
            T[tuple([int(s) for s in row[1].split(',')])] = int(row['T'])
    
[/code]

CSVファイルはカンマ区切りと空白区切りで作成しています。  
カンマ以外は特にこだわり等はなく、他にこの方が使いやすい等ありましたら、ご指摘いただけると幸いです。


CC BY-SA 4.0
2020-11-04T14:50:23.207
71728
2022-08-11T04:05:50.573
2020-11-04T16:34:13.150
3060
42603
question
python python3 csv
PythonでCSVファイルをDict型およびlist型で読み込みたい


提示されたコードをベースに A C D T を求めるコード

[code]

    import csv
    
    A=[]
    C={}
    D={}
    T={}
    
    with open('/Users/data.csv') as f:
        r = csv.reader(f, delimiter=' ')
        next(r)
        for line in r:
            key = tuple(map(int, (val for val in line[0].split(','))))
            A += [key]
            C[key] = int(line[1])
            D[key] = int(line[2])
            T[key] = int(line[3])
    
[/code]


CC BY-SA 4.0
2020-11-04T15:36:53.423
71730
2020-11-04T15:36:53.423
41756
71728
answer


以下は pandas を利用する方法です。

[code]

    >>> import pandas as pd
    >>> df = pd.read_csv('data.csv', engine='python', sep='[, ]', skiprows=1, header=None)
    >>> A = list(zip(df[0], df[1]))
    >>> C, D, T = [dict(zip(A, df[i])) for i in range(2, df.shape[1])]
    
    >>> from pprint import pprint
    >>> pprint(A)
    [(1, 7),
     (2, 7),
     (3, 7),
     (4, 7),
     (5, 7),
     (6, 7),
          :
    
    >>> pprint(C, sort_dicts=False)
    {(1, 7): 0,
     (2, 7): 0,
     (3, 7): 0,
     (4, 7): 0,
     (5, 7): 0,
     (6, 7): 0,
     (0, 1): 8,
     (0, 2): 70,
     (0, 3): 9,
     (0, 5): 5,
          :
    
    >>> pprint(D, sort_dicts=False)
    {(1, 7): 0,
     (2, 7): 0,
     (3, 7): 0,
     (4, 7): 0,
     (5, 7): 0,
     (6, 7): 0,
     (0, 1): 10,
     (0, 2): 15,
     (0, 3): 10,
     (0, 5): 10,
          :
    
    >>> pprint(T, sort_dicts=False)
    {(1, 7): 2,
     (2, 7): 3,
     (3, 7): 5,
     (4, 7): 2,
     (5, 7): 3,
     (6, 7): 5,
     (0, 1): 2,
     (0, 2): 3,
     (0, 3): 5,
     (0, 5): 2,
          :
    
    
[/code]


CC BY-SA 4.0
2020-11-04T17:33:49.890
71735
2020-11-04T17:33:49.890
71728
answer