2016-04-14 4 views
0
#!/usr/bin/python 

import sys 
from collections import defaultdict 
from collections import Counter 

new_dic_defaultdict = defaultdict(dict) 
#new_dic_defaultdict = defaultdict(int) 

file="SMSCDR_POSTPAID_1509_10.84.0.29_AS.log" 

fp=open(file,"r") 
str = fp.readlines(); 

for line in str: 
     array = line.split('|') 
     system_id = array[55] 
     Origin = array[12] 
     TIME = array[0] 
     message_id = array[62] 
     new_dic_defaultdict[Origin][system_id] = new_dic_defaultdict[Origin].setdefault(system_id, 0) + 1; 

print new_dic_defaultdict 

Здесь я могу написать двухмерный каталог. Если я добавлю третий размер, он не будет работать.Многомерный словарь в python

Ex: new_dic_defaultdict[Origin][system_id][message_id] = new_dic_defaultdict[Origin][system_id].setdefault(message_id, 0) + 1; 

Как решить эту проблему

ответ

0

Вы можете использовать defaultdict так:

new_dic_defaultdict = defaultdict(lambda: defaultdict(int)) 
+0

new_dic_defaultdict [Origin] [system_id] [message_id] [LFR] = new_dic_defaultdict [Origin] [system_id] [ message_id] .setdefault (lfr, 0) + 1; Если я использую эту функцию для трех измерений. Но не работает для четырех измерений. –

+0

Если вы хотите больше измерений, вы можете добавить их аналогичным образом: new_dic_defaultdict = defaultdict (lambda: defaultdict (lambda: defaultdict (int))). Но это совсем не читаемо, поэтому я бы рекомендовал вам использовать что-то вроде https://github.com/mewwts/addict –

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