2017-09-11 55 views
-2

我想打一個詞典有名字的關鍵& data.In的views.py我寫KeyError:'name'爲什麼我不能使用'name'?

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)) 

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

main() 

當我打印出來data_dict,它是

OrderedDict([(1, {'user_id': '100', 'group': 'A', 'name': 'Tom', 'dormitory': 'C'}), (2, {'user_id': '50', 'group': 'B', 'name': 'Blear', 'dormitory': 'E'})]) 

我理想的詞典是

dicts = { 
    Tom: { 
     'user_id': '100', 
     'group': 'A', 
     'name': 'Tom', 
     'dormitory': 'C' 
    }, 
    Blear: { 
    }, 
} 

我應該如何解決這個問題?我應該寫什麼?

+0

爲什麼第一次使用'Tom'和接下來的'2'? –

+0

@BearBrown對不起,這是錯誤的。我編輯了我的問題。 – user8504021

回答

0

該代碼在字典中使用了錯誤的鍵。密鑰是1,2,並且沒有name密鑰。您可以使用此代碼來代替:

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

thx,你的答案。我寫了你的代碼,但打印出來了。我想也許data_dict.values()是data_dict_origin.values()。我該怎麼做? – user8504021

0

data_dict_origin有數字作爲鍵和類型的字典作爲值(這在技術上使得稀疏數組類型的字典)。 「名稱」鍵存在於這些字符中,而不是在您的data_dict中。

+0

thx,你的答案。如果我寫了你的代碼,我該怎麼寫呢? – user8504021

+0

@ user8504021請避免幼稚的拼寫,這不是要讓你看起來很聰明。而且SO不是免費的gimme-da-code-plz服務,不管是FWIW。 –

相關問題