2016-11-24 3 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

Вы должны использовать печать формата. Кроме того, вам следует использовать метод 'defaultdict' или, по крайней мере, метод' setdefault' простого 'dict'. Наконец, мне кажется, вы хотите, чтобы ваши данные были заказаны, поэтому я не уверен, что диктофоны - это путь. –

+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.

Смежные вопросы