bugfix> python > 投稿

次のcsvファイルの各行に「辞書の辞書」を作成したい

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

つまり、mydict ["Alice"]は{'AGATC':2、 'AATG':8、 'TATC':3}などである必要があります。

.readerと.DictReaderの関数を十分に理解していません。https://docs.python.org/3/library/csv.html#csv.DictReader 私は初心者であり、ドキュメントを完全に理解できないためです。他に推奨できる「より簡単な」リソースはありますか?

まず、最初の列、つまり名前を取得して、それらをキーとして配置する必要があります。その最初の列にアクセスするにはどうすればよいですか?

次に、その名前の中に(値として)辞書を作成します。キーはAGATC、AATG、TATCです。私の言いたいことが分かりますか?それは可能ですか?

編集、進行中:

# Open the CSV file and read its contents into memory.
with open(argv[1]) as csvfile:
    reader = list(csv.reader(csvfile))
    # Each row read from the csv file is returned as a list of strings.
    # Establish dicts.
    mydict = {}
    for i in range(1, len(reader)):
        print(reader[i][0])
        mydict[reader[i][0]] = reader[i][1:]
    print(mydict)

でる:

{'Alice': ['2', '8', '3'], 'Bob': ['4', '1', '5'], 'Charlie': ['3', '2', '5']}

しかし、上記のようにネストされた辞書を実装するにはどうすればよいですか?

編集#3:

# Open the CSV file and read its contents into memory.
    with open(argv[1]) as csvfile:
        reader = list(csv.reader(csvfile))
        # Each row read from the csv file is returned as a list of strings.
        # Establish dicts.
        mydict = {}
        for i in range(1, len(reader)):
            print(reader[i][0])
            mydict[reader[i][0]] = reader[i][1:]
        print(mydict)
        
        print(len(reader))
        dictlist = [dict() for x in range(1, len(reader))]
        #for i in range(1, len(reader))
        for i in range(1, len(reader)):
            dictlist[i-1] = dict(zip(reader[0][1:], mydict[reader[i][0]]))
        #dictionary = dict(zip(reader[0][1:], mydict[reader[1][0]]))
        print(dictlist)

でる:

[{'AGATC': '2', 'AATG': '8', 'TATC': '3'}, {'AGATC': '4', 'AATG': '1', 'TATC': '5'}, {'AGATC': '3', 'AATG': '2', 'TATC': '5'}]
{'AGATC': 1, 'AATG': 1, 'TATC': 5}

だから私は自分でそれを解決しました:)

回答 1 件
  • 次のコードは、dict構造に関してあなたが求めていたものを提供します。

    import csv
    with open('file.csv', newline='') as csvfile:
        mydict = {}
        reader = csv.DictReader(csvfile)
        # Iterate through each line of the csv file
        for row in reader:
            # Create the dictionary structure as desired.
            # This uses a comprehension
            # Foreach item in the row get the key and the value except if the key
            # is 'name' (k != 'name')
            mydict[row['name']] = { k: v for k, v in row.items() if k != 'name' }
        print(mydict)
    
    

    これはあなたに与えるでしょう

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

    これらについての詳細が必要な場合は、ネット上に理解をカバーするビデオや記事がたくさんあります。

あなたの答え