1
私はcsvファイルから階層的なdictを作成しようとしています(私が探している出力を見てください)。csvから階層辞書を作成するには?
これまでのコードはitertools
で検索していましたが、これは私がこの作業に必要なツールだと思っています。 pandas
は使用できません。多分、キーの値を新しい辞書に入れて、ポリシー・インターフェースをマップして新しいdict
を作成する必要があると思いますか?
import csv
import pprint
from itertools import groupby
new_dict=[]
with open("test_.csv", "rb") as file_data:
reader = csv.DictReader(file_data)
for keys, grouping in groupby(reader, lambda x: x['groupA_policy']):
new_dict.append(list(grouping))
pprint.pprint(new_dict)
私のcsvファイルは次のようになります。
GroupA_Host,groupA_policy,groupA_policy_interface,GroupB_Host,GroupB_policy,GroupB_policy_interface
host1,policy10,eth0,host_R,policy90,eth9
host1,policy10,eth0.1,host_R,policy90,eth9.1
host2,policy20,eth2,host_Q,policy80,eth8
host2,policy20,eth2.1,host_Q,policy80,eth8.1
私が達成したい所望の出力がこれです:私はitertoolsはここでは必要ではないと思います
[{'GroupA_Host': 'host1',
'GroupB_Host': 'host_R',
'GroupB_policy': 'policy90',
'groupA_policy': 'policy10',
'interfaces': [{'GroupB_policy_interface': 'eth9',
'group_a_policy_interfaces': 'eth0'},
{'GroupB_policy_interface': 'eth9.1',
'group_a_policy_interface': 'eth0.1'}]},
{'GroupA_host': 'host2',
'GroupB_Host': 'host_Q',
'GroupB_policy': 'policy80',
'groupA_policy': 'policy20',
'interfaces': [{'GroupB_policy_interface': 'eth8',
'groupA_policy_interfaces': 'eth2'},
{'groupA_policy_interface': 'eth8.1',
'groupA_policy_interfaces': 'eth2.1'}]}]
素敵な、一つの質問を。 if文を本当に必要としますか?ここでその使用法を理解しようとしています。 – zig
ええ、 'd [key] = [interface]'しただけでは、リストに追加するのではなく、リストを上書きします – thomaskeefe