2017-09-11 51 views
0

我想做一個字典,有name的密鑰&數據。在views.py我寫KeyError爲什麼字典是空的?

data_dict ={} 
def try_to_int(arg): 
    try: 
     return int(arg) 
    except: 
     return arg 

def main(): 
    book4 = xlrd.open_workbook('./data/excel1.xlsx') 
    sheet4 = book4.sheet_by_index(0) 

    data_dict_origin = OrderedDict() 
    tag_list = sheet4.row_values(0)[1:] 
    for row_index in range(1, sheet4.nrows): 
     row = sheet4.row_values(row_index)[1:] 
     row = list(map(try_to_int, row)) 
     data_dict_origin[row_index] = dict(zip(tag_list, row)) 

     print(data_dict_origin) 

     for value in data_dict_origin.values(): 
      if value['name'] in data_dict_origin: 
       data_dict[value['name']].update(value) 
      else: 
       data_dict[value['name']] = value 

    print(data_dict) 

main() 

print(data_dict_origin)給出:

OrderedDict([(1, {'user_id': '100', 'group': 'A', 'name': 'Tom', 'dormitory': 'C'})]) 

所以,我真的不明白爲什麼這個錯誤發生。 我試圖像其他的東西:

for value in data_dict.values(): 
      if value['name'] in data_dict: 
       data_dict[value['name']].update(value) 
      else: 
       data_dict[value['name']] = value 

{}被證明。 我應該如何解決這個問題?

+0

但是你用'data_dict [值 '名']。更新(值)'?你不應該總是寫'data_dict [value ['name']] = value'嗎? –

+0

你的'data_dict_origin'鍵是整數,所以'data_dict_origin'中的value ['name']永遠不會成立。你是否想要在data_dict'中測試'value ['name']而不是? –

+0

@WillemVanOnsem:他們正在嘗試按名稱整理字典,所以不會。 –

回答

0

簡單勝於複雜。

from collections import defaultdict 

data_dict = defaultdict(dict) 


def try_to_int(arg): 
    try: 
     return int(arg) 
    except: 
     return arg 


def main(): 
    book4 = xlrd.open_workbook('./data/excel1.xlsx') 
    sheet4 = book4.sheet_by_index(0) 

    tag_list = sheet4.row_values(0)[1:] 
    for row_index in range(1, sheet4.nrows): 
     row = sheet4.row_values(row_index)[1:] 
     row = list(map(try_to_int, row)) 
     value = dict(zip(tag_list, row)) 

     print(value) 
     if value.get('name', ''): 
      data_dict[value['name']].update(value) 


    print(data_dict) 


main() 
+0

thx你的意見。我在這部分'data_dict [value ['name']]。update(value)''有同樣的錯誤'我該如何解決這個問題? – user8504021

+0

你用'data_dict = defaultdict(dict)'替換了'data_dict = {}'嗎?如果答案是**是**我假設,KeyError是因爲'name'不在'value'中而引發的 –

+0

是的,我用data_dict = defaultdict(dict)替換了data_dict = {}。所以我應該寫'closing_rate_dict = {} closing_rate_dict = defaultdict(dict) def try_to_int(arg):????我寫了這樣並運行,但同樣的錯誤發生。 – user8504021