2014-10-09 82 views
0

我有一個很大的Excel文件,包含36352行,包含盜竊信息。每行包含一個日期和發生事件的市政府的名稱。我試圖將這個數據集轉換爲每個城市的日曆地圖,說明一年中每天有多少盜竊案。詞典:增加一個鍵的價值也被添加到其他鍵

我首先創建了一個日曆地圖(字典),其中日期是關鍵,值是盜竊的數量(初始化爲0):{day1: 0, day2: 0}

接下來我做了另一個字典,其中的鍵是城市的名稱和值是日曆字典。

例如爲:

Dictionary['New York'] = {day1: 0, day2: 0, day3: 0} 

這個初始化工作正常。

下一步我帶是去通過排我的數據集行(寫入content_split),把全市的名稱和事件作爲鍵的日期,並加1的值:

Dictionary[name-in-column-14-of-excel-file][day-of-event] += 1 

我寫了這是一個循環:

for k in range(1,len(excelfile)): #for all rows in the excel file 
    # datetime.datetime(year,month,day) 
    d = datetime.datetime(int(content_split[k][9]),int(content_split[k][8]),int(content_split[k][7])) 
    # Dictionary[name-of-municipality][timestamp-in-utc] += 1 
    Municipality_dict[content_split[k][14]][calendar.timegm(d.timetuple())] += 1 

如果我再看看日曆字典1個市,我得到非常高的數字(176起入室盜竊案1天1個市)和不同城市的日曆地圖是相同的。因此,我的市政鑰匙似乎不起作用,但我不知道。

有誰知道我在做什麼錯?

編輯對我如何創建的字典:

# Open map containing the days 
with open('days.csv') as f1: 
    days_temp = f1.readlines() 

alldays = [] 

# Get dd;mm;yy format to [dd, mm, yy] format 
for day in days_temp: 
    alldays.append(day.strip().split(';')) 

Timestamp = {} 

# Convert days into UTC codes 
for i in range(len(alldays)): 
d = datetime.datetime(int(alldays[i][2]),int(alldays[i][1]),int(alldays[i][0])) 

# dictionary[UTC-time-code] = 0 (no burglaries occurred) 
Timestamp[calendar.timegm(d.timetuple())] = 0 

# Open file with names of municipalities 
with open('file2.csv') as f2: 
    municipalities_temp = f2.readlines() 

municipalities_dict = {} 

# dictionary[name-of-municipality] = calendar 
for instance in municipalities_temp: 
    municipalities_dict[instance.strip()] = Timestamp 
+1

你是如何創建這些字典的?您正在共享引用,並且只有*一個*字典,而不是單獨的對象。 – 2014-10-09 14:14:55

+2

如果你做了類似'd = {'day1':0,...}; M_D ['紐約'] = d; M_D ['Boston'] = d; ...',你會看到你得到的結果。 – chepner 2014-10-09 14:16:36

+0

我編輯了我原來的帖子。我一開始並不理解「共享引用」部分,但現在在ErlVolton的回覆中,我明白你的意思。 :) – Jolien 2014-10-09 14:42:07

回答

0

這聽起來像當你創建你的密鑰是本市名第二字典,每個關鍵是讓分配爲相同的參考字典。請參見下面的示例:

>>> test = {"x":"y"} 
>>> test2 = test 
>>> test["x"] = "foo" 
>>> test2 
{'x': 'foo'} 
>>> 

注意test2的[「X」]改變時測試改變,因爲test2的是測試參考富,而不是它自己的字典。解?

import copy 

template_dict = {day1: 0, day2: 0, day3: 0} 
Dictionary['New York'] = copy.deepcopy(template_dict) 
+0

太棒了!這工作! – Jolien 2014-10-09 14:40:11

+0

@Jolien。另外,也可以使用'template_dict = lambda:{day1:0,day2:0,day3:0}'來代替複製,然後將其用作Dictionary ['New York'] = template_dict()'(假設這些鍵應該是'day1','day2'和'day3') – 2014-10-09 14:41:06

相關問題