86386


次の例のような，各数値がスペースで区切られているデータからなる.txtファイルがあります．

[code]

    3 0.6 0.8 0.2
    12 0.9 0.8 0.4
    11 0.1 0.4 0.5
    
[/code]

そして，最初の列の数値（この例では3,12,11）をkey，それ以降の数値をlistに変換してそのkeyに対応するvalueからなるdictionaryを作りたいです．

つまり，この例に対応する期待する出力は次の様になります．

[code]

    {3:[0.6, 0.8, 0.2]，12: [0.9, 0.8, 0.4], 11: [0.1, 0.4, 0.5]}
    
[/code]

やり方が思いつかないので，どなたか力を貸していただけないでしょうか．  
よろしくお願いします．


CC BY-SA 4.0
2022-02-16T07:28:03.207
86383
2022-02-16T11:47:52.420
36856
question
python python3
.txtファイルに保存されているデータをdict型に変換する方法


`split`を使用してスペースごとに項目を区切り、スライスすることで最初の項目`[0]`をキーに、それ以降すべて`[1:]`を値にした辞書を作ることができます。

[code]

    s = """3 0.6 0.8 0.2
    12 0.9 0.8 0.4
    11 0.1 0.4 0.5""" 
    # スペース区切りの配列をスライスしてキーと値に分ける
    d = { l.split(" ")[0] : l.split(" ")[1:] for l in s.split("\n") }
    print(d)
    # {'3': ['0.6', '0.8', '0.2'], '12': ['0.9', '0.8', '0.4'], '11': ['0.1', '0.4', '0.5']}
    
[/code]


CC BY-SA 4.0
2022-02-16T08:02:42.760
86385
2022-02-16T08:02:42.760
9820
86383
answer


文字列のままで良いのなら、@payanecoさんの回答が正解だと思いますが、  
期待する出力の提示内容を見ると、数値(keyがint、valueがfloatのlist)に見えるので、こんな感じになるのでは？

[code]

    with open('data.txt', 'r') as f:
        data = [l.split() for l in f.read().splitlines()]
    
    d = {}
    for x in data:
        k = int(x[0])
        v = [float(s) for s in x[1:]]
        d[k] = v
    
[/code]


CC BY-SA 4.0
2022-02-16T08:06:57.863
86386
2022-02-16T08:06:57.863
26370
86383
answer


別解として(Pandas を使う場合)。

[code]

    import pandas as pd
    
    df = pd.read_table('data.txt', header=None, sep=r'\s', engine='python', index_col=0)
    dic = df.T.to_dict('list')
    
    print(dic)
    
    #
    {3: [0.6, 0.8, 0.2], 12: [0.9, 0.8, 0.4], 11: [0.1, 0.4, 0.5]}
    
[/code]


CC BY-SA 4.0
2022-02-16T11:34:23.653
86395
2022-02-16T11:47:52.420
2022-02-16T11:47:52.420
47127
47127
86383
answer