私は次の辞書を持っています(これは本質的にテーブルに似ています):
tbl = {'col0':[20, 30, 22, 15, 24],
'col1':[13, 15, 10, 14, 15],
'col2':[52, 12, 14, 36, 23] }
これlist of list
を、列全体のすべてのリストを結合するに変換したい(つまり、同じインデックス要素がリストのリスト内の1つのリスト要素になる)
次のようになります。
[[20, 13, 52], [30, 15, 12], [22, 10, 14], [15, 14, 36], [24, 15, 23]]
私dict
が次のような状況でも機能するはずです。
tbl = {'col0':1.0,
'col1':7.0,
'col2':1.3 }
# converted into
[[1.0, 7.0, 1.3]]
これを行うためのPythonの方法はありますか?基本的__str__
に、現在テーブル値をdict
フォーマットで格納している構造のメソッドをオーバーライドして、テーブル構造を行方向に出力する必要があります
いつでも読めない二重リスト内包表記を使用できます!
my_list_of_lists = [[tbl[key][idx] for key in tbl] for idx in range(len(tbl[list(tbl.keys())[0]]))]
長さのないデータがある場合は、代わりにこれを使用できます(すべての列が同じ長さである限り)。
def len_checker(item):
try:
return len(item)
except:
return 0
my_list_of_lists = [[tbl[key][idx] for key in tbl] for idx in range(len(tbl[list(tbl.keys())[0]]))] if len_checker(tbl[list(tbl.keys())[0]]) else [[tbl[key] for key in tbl]]
これらは楽しいではありませんか?
キー'col0'
がテーブルにあることを保証できれば、状況は少しきれいになります。
my_list_of_lists = [[tbl[key][idx] for key in tbl] for idx in range(len(tbl['col0']))] if len_checker(tbl['col0']) else [[tbl[key] for key in tbl]]
ただし、真面目な話ですが、クリーンなコードが必要な場合は、PandasDataFrameのようなものを使用する必要があります。
from pandas import DataFrame
try:
df = DataFrame(tbl)
except:
df = DataFrame(tbl,index=[0])
my_list_of_lists = [list(df.iloc[row]) for row in range(df.shape[0])]
numpyも使用できます。
import numpy as np
arr = np.vstack([np.array(tbl[key]) for key in tbl])
my_list_of_lists = [list(arr[...,col]) for col in range(arr.shape[1])]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加