CSV ファイルは networkx グラフに取り込まれ、以下の形式に反復処理されます。
これは、辞書を反復処理するために使用しているコードです。
diction = {
"1234":{
"name":"XYZ",
"rollNo":"2",
"marks":"40"
},
"2122":{
"name":"XYZ",
"rollNo":"2",
"marks":"60"
}
}
new_dict = {}
key_list = []
for key,values in diction.items():
if key not in key_list:
name = values['name']
rollNo = values['rollNo']
for k,v in diction.items():
if k not in key_list:
key_list.append(key)
key_list.append(k)
if name == v['name'] and rollNo == v['rollNo']:
if (k,key) not in key_list:
new_dict.setdefault(key, []).append(v)
elif key in key_list:
new_dict[key].append(v)
elif k in key_list:
new_dict[k].append(v)
else:
new_dict.setdefault(key, []).append(v)
print(new_dict)
入力:
{
"1234":{
"name":"XYZ",
"rollNo":"2",
"marks":"40"
},
"2122":{
"name":"XYZ",
"rollNo":"2",
"marks":"60"
}
}
出力:
{
"1234":[{
"name":"XYZ",
"rollNo":"2",
"marks":"40"
},
{
"name":"XYZ",
"rollNo":"2",
"marks":"60"
}]
}
チェックすべき 500 万個のキーがあります。
私は現在 for inside for を使用していますが、時間の複雑さが n ^ n であるため、非常に時間がかかります。
最適化されたソリューションが必要です。
試しているコードは何ですか?
– ヴィシャル・シン
2020 年 9 月 3 日11:17
@VishalSingh が私のコードを含む質問を更新しました。
– アクシャイ・コルディア
2020 年 9 月 3 日 11:31
私の理解では、あなたは「マージ」します。キー「1234」に関連付けられたリスト内の 2 つの辞書キー「name」の値が同じであるためです。および「ロールNo」。そうですか?
– qouify
2020 年 9 月 5 日 16:37
------------------------
コードのアルゴリズム構造以外に、コードには大きな問題が 1 つあります。 key_list.append(key) と key_list.append(k) の 2 行では、key_list は文字列値を保持すると想定されています。ただし、後の if (k,key) not in key_list では、key_list がタプル値 (文字列のペア) を保持すると想定します。したがって、このテストは常に True と評価されるように思えます。
問題を正しく理解していれば、これで問題が解決する可能性があります (少なくとも、例に必要な出力が生成されます)。
diction = {
"1234":{
"name":"XYZ",
"rollNo":"2",
"marks":"40"
},
"2122":{
"name":"XYZ",
"rollNo":"2",
"marks":"60"
}
}
new_dict = {}
attrib = {} # a dictionary mapping (name, rollNo) to diction keys
for key, values in diction.items():
name = values['name']
rno = values['rollNo']
if (name, rno) not in attrib: # couple (name, rollNo) unseen so far
new_dict[key] = [values]
attrib[(name, rno)] = key # record the association(name, rollNo) <-> key
else: # couple (name, rollNo) already seen
new_dict[attrib[(name, rno)]].append(values)
print(new_dict)