2016-11-24 7 views
0

作成されたマジックコマンドとリストがリストにあります。 "d1"はすべての行のデータを持つため、最も完全な辞書です。 しかし、d2、d3およびd4はすべての行のデータを持っています。空の値を持つ辞書を連結します。

file1 used to created d1: 
    key1 x1 x2 x3 
    key2 y1 y2 y3 
    key3 z1 z2 z3 
    key4 w1 w2 w3 
    key5 k1 k2 k3 
    key6 q1 q2 q3 

file2 used to created d2: 
    key1 x4 x5 x6 
    key2 y4 y5 y6 
    key3 z4 z5 z6 
    key6 q4 q5 q6 

file3 used to created d3: 
    key2 y7 
    key3 z7 
    key6 q7 

file4 used to created d4: 
    key3 z8 
    key4 w8 
    key5 k8 

申し訳ありませんが、私はそれが他の人にとって役に立つと思います。ここで

は問題です:私は値を持っていないとき

dicts = [d1, d2, d3, d4] # my dictionary list 
new_dict = {} 

for d in [d1, d2, d3, d4]: 
    for key in d: 
     if key not in new_dict: 
      new_dict[key] = d[key] 
     else: 
      new_dict[key] += d[key] 

for k, v in new_dict.iteritems(): 
    print (k+'\t'+ ('\t'.join(v))) 

私の予想テーブルは空スペースで、次のようにする必要があります。どのように私は、彼らは「トンが存在ドン場合は、空の/ NULL値を含めることができます

key1 x1 x2 x3 x4 x5 x6 
    key2 y1 y2 y3 y4 y5 y6 y7 
    key3 z1 z2 z3 z4 z5 z6 z7 z8 
    key4 w1 w2 w3 w8  
    key5 k1 k2 k3 k8 
    key6 q1 q2 q3 q7 

key1 x1 x2 x3 x4 x5 x6 
    key2 y1 y2 y3 y4 y5 y6 y7 
    key3 z1 z2 z3 z4 z5 z6 z7 z8 
    key4 w1 w2 w3     w8  
    key5 k1 k2 k3     k8 
    key6 q1 q2 q3    q7 

しかし、ほとんどこれまで私が達する可能性は、このでしたか? ありがとうございます。

+0

あなたは 'format'印刷を使うべきです。また、 'defaultdict'や、少なくとも' set dault'の 'setdefault'メソッドの使用を考慮する必要があります。最後に、あなたのデータが注文されるように思えるので、私はdictsが行く方法であるかどうかは分かりません。 –

+0

このスクリプトでこの関数を使用する方法の例を教えてください。 –

+0

'pandas'を使うと、これは無限に簡単になります。申し訳ありません、今私は私の電話の上にあり、私は実際にコードを書くことはできません。しかし、これらの事例を見てください。 'OrderedDict'を見ることもできます。 –

答えて

1

各Dict dの場合は、new_dictのリストに空の値/ヌル値(例:None)を設定して同じサイズにします。

for d in ...: 
    ... 
    size = max(map(len, new_dict.values())) 
    for value in new_dict.values(): 
     value += [None] * (size - len(value)) 

そしてdefaultdictまたはsetdefaultを検討する提案をseconding。

関連する問題