2017-09-11 2 views
-2

ich machen möchte, ein Wörterbuch Name Schlüssel & data.In hat views.py IKeyError: 'name' Warum kann ich 'name' nicht verwenden?

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

schrieb Als ich data_dict ausgedruckt, es ist

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

Mein Ideal-Wörterbuch ist

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

Wie soll ich das beheben? Was soll ich schreiben?

+0

Warum benutzen Sie zum ersten Mal 'Tom' und das nächste' 2'? –

+0

@BearBrown Sorry, es ist falsch.Ich habe meine Frage bearbeitet. – user8504021

Antwort

0

Der Code verwendet den falschen Schlüssel im Wörterbuch. Die Schlüssel sind 1, 2 und haben nicht den Schlüssel name. Sie können diesen Code verwenden, anstatt:

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 schrieb ur-codes, aber {} wurde ausgedruckt.Ich denke, vielleicht ist data_dict.values ​​() data_dict_origin.values ​​() .Wie soll ich das machen? – user8504021

0

Ihre data_dict_origin haben Zahlen als Schlüssel und dicts als Wert (das macht es technisch eine spärliche Anordnung von dicts). Der "Name" Schlüssel existiert in diesen Dicts, nicht in Ihrem data_dict.

+0

thx, ur answer.Wenn ich ur codes schrieb, wie soll ich es schreiben? – user8504021

+0

@ user8504021 Bitte vermeiden Sie die kindliche Schreibweise, es ist nicht so, dass Sie hier gut aussehen. Und SO ist kein kostenloser gimme-da-code-plz Dienst, weder FWIW. –

Verwandte Themen