[解決済み] Pythonでネストしたdictを作成する方法は?
質問
2つのCSVファイルを持っています。Data」と「Mapping」の2つのCSVファイルがあります。
-
'Mapping'ファイルには4つのカラムがあります。
Device_Name
,GDN
,Device_Type
およびDevice_OS
. 4つのカラムはすべて入力されています。 -
Data' ファイルには、これらと同じカラムがあります。
Device_Name
カラムに入力され、他の3つのカラムは空白です。 -
Pythonのコードで両方のファイルを開き、それぞれについて
Device_Name
をデータファイルにマッピングし、そのGDN
,Device_Type
およびDevice_OS
の値をMappingファイルから取得します。
2つの列しか存在しない場合(1つはマッピングする必要がある)、dictを使用する方法は知っていますが、3つの列をマッピングする必要がある場合にこれを達成する方法がわかりません。
以下は、私がマッピングを試みたコードです。
Device_Type
:
x = dict([])
with open("Pricing Mapping_2013-04-22.csv", "rb") as in_file1:
file_map = csv.reader(in_file1, delimiter=',')
for row in file_map:
typemap = [row[0],row[2]]
x.append(typemap)
with open("Pricing_Updated_Cleaned.csv", "rb") as in_file2, open("Data Scraper_GDN.csv", "wb") as out_file:
writer = csv.writer(out_file, delimiter=',')
for row in csv.reader(in_file2, delimiter=','):
try:
row[27] = x[row[11]]
except KeyError:
row[27] = ""
writer.writerow(row)
を返します。
Attribute Error
.
いろいろ調べた結果、ネストしたdictを作る必要があると思うのですが、どうすればいいのか見当がつきません。
どのように解決するのですか?
ネストされたディクショナリーは、ディクショナリーの中のディクショナリーです。非常にシンプルなものです。
>>> d = {}
>>> d['dict1'] = {}
>>> d['dict1']['innerkey'] = 'value'
>>> d['dict1']['innerkey2'] = 'value2'
>>> d
{'dict1': {'innerkey': 'value', 'innerkey2': 'value2'}}
また
defaultdict
から
collections
パッケージを使用することで、ネストした辞書の作成が容易になります。
>>> import collections
>>> d = collections.defaultdict(dict)
>>> d['dict1']['innerkey'] = 'value'
>>> d # currently a defaultdict type
defaultdict(<type 'dict'>, {'dict1': {'innerkey': 'value'}})
>>> dict(d) # but is exactly like a normal dictionary.
{'dict1': {'innerkey': 'value'}}
好きなように入力すればいい。
私はあなたのコードで何かをお勧めします のように は以下の通りです。
d = {} # can use defaultdict(dict) instead
for row in file_map:
# derive row key from something
# when using defaultdict, we can skip the next step creating a dictionary on row_key
d[row_key] = {}
for idx, col in enumerate(row):
d[row_key][idx] = col
によると コメント :
は、上記のコードが質問を混乱させているかもしれません。私の問題を簡単に説明します。I a.csv b.csv という2つのファイルがあり、a.csv には4つの列 i j k l があり、b.csv にもあります。 これらのカラムは、i はこれらの CSV のキーカラムのようなものです。 はa.csvでは空ですが、b.csvでは入力されています。j k i` をキーカラムとする l カラムを b.csv から a.csv ファイルにコピーします。
私の提案は次のようなものです。 のように このように(defaultdictを使用せずに)。
a_file = "path/to/a.csv"
b_file = "path/to/b.csv"
# read from file a.csv
with open(a_file) as f:
# skip headers
f.next()
# get first colum as keys
keys = (line.split(',')[0] for line in f)
# create empty dictionary:
d = {}
# read from file b.csv
with open(b_file) as f:
# gather headers except first key header
headers = f.next().split(',')[1:]
# iterate lines
for line in f:
# gather the colums
cols = line.strip().split(',')
# check to make sure this key should be mapped.
if cols[0] not in keys:
continue
# add key to dict
d[cols[0]] = dict(
# inner keys are the header names, values are columns
(headers[idx], v) for idx, v in enumerate(cols[1:]))
ただし、csvファイルをパースするために csvモジュール .
関連
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
PythonはWordの読み書きの変更操作を実装している
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac