2017-09-11 15 views
-2

私は辞書が名前のキー& data.Inは私がdata_dictをプリントアウトするとき、それはKeyError: 'name'なぜ 'name'を使用できないのですか?

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: { 
    }, 
} 
である

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

を書いたのviews.py持っていることを確認したいです

これを修正するにはどうすればよいですか?

+0

初めて「トム」と次の「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、ur answer.iがurコードを書きましたが、{}が出力されました。おそらくdata_dict.values()はdata_dict_origin.values()だと思います。 – user8504021

0

あなたdata_dict_originは、(技術的にdictsのまばらな配列にする)の値としてキーとdictsとして数字を持っています。 「名前」キーは、あなたのdata_dictではなく、それらのディクテーションに存在します。

+0

thx、ur答え。もし私がurコードを書いたら、どうすればいいですか? – user8504021

+0

@ user8504021幼稚な綴りを避けてください。あなたがここで賢く見えるようにするのは面倒ではありません。そしてSOはFWIWの無料のgimme-da-code-plzサービスではありません。 –

関連する問題