2016-11-24 58 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))) 

我的預期表應該是這樣的,空的空間時,我沒有價值。

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'或者至少''dict'的'setdefault'方法。最後,在我看來,你希望你的數據是有序的,所以我不確定是否需要點滴。 –

+0

你可以給我一些例子如何在這個腳本中使用這個功能嗎? –

+0

如果你使用'pandas',這將會容易得多。對不起,現在我在我的手機上,我不能寫任何代碼。但請查看這些事情的例子。你也可能想看看'OrderedDict'。 –

回答

1

對於每個字典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)) 

而借調的建議,考慮defaultdictsetdefault