2014-04-21 40 views
6

Mam błąd z tym wierszem. Pracuję ze słownikiem z pliku z importem. Jest to słownik:błąd słownika Pythona AttributeError: obiekt 'list' nie ma atrybutu 'keys'

users = [{'id':1010,'name':"Administrator",'type':1},{'id':1011,'name':"Administrator2",'type':1}] 

A metoda z którym praca jest w następujący sposób:

def addData(dict, entry): 
new = {} 
x = 0 
for i in dict.keys(): 
    new[i] = entry(x) 
    x += 1 
dict.append(new) 

Gdzie „dict” byłoby „użytkowników”, ale błąd jest, że słownik nie rozpoznaje ja jako taki. Czy ktoś może mi powiedzieć, że mam błąd w słowniku?

+0

zmiennej users' 'faktycznie jest lista słowników. –

Odpowiedz

6

Może szukasz czegoś wzdłuż tych linii:

users = [{'id':1010,'name':"Administrator",'type':1},{'id':1011,'name':"Administrator2",'type':1}] 

new_dict={} 

for di in users: 
    new_dict[di['id']]={} 
    for k in di.keys(): 
     if k =='id': continue 
     new_dict[di['id']][k]=di[k] 

print new_dict  
# {1010: {'type': 1, 'name': 'Administrator'}, 1011: {'type': 1, 'name': 'Administrator2'}} 

Następnie można zrobić:

>>> new_dict[1010] 
{'type': 1, 'name': 'Administrator'} 

Zasadniczo, jest to toczenie listę anonimowych dicts w dict z dicts które są klucze od klucza 'id'

6

To nie jest diction, to lista słowników!
EDIT: I aby ten trochę więcej odpowiedzi-owski:

users = [{'id':1010,'name':"Administrator",'type':1},{'id':1011,'name':"Administrator2",'type':1}] 
newusers = dict() 
for ud in users: 
    newusers[ud.pop('id')] = ud 
print newusers 
#{1010: {'type': 1, 'name': 'Administrator'}, 1011: {'type': 1, 'name': 'Administrator2'}} 
newusers[1012] = {'name': 'John', 'type': 2} 
print newusers 
#{1010: {'type': 1, 'name': 'Administrator'}, 1011: {'type': 1, 'name': 'Administrator2'}, 1012: {'type': 2, 'name': 'John'}} 

która jest zasadniczo taka sama jak Dawgs odpowiedzieć, ale z uproszczonego podejścia do generowania nowego słownika

+0

To nie jest odpowiedź, to komentarz! – inspectorG4dget

+0

Masz rację, ale bez 50 reputacji nie mogę komentować (co bym zrobił). Ale wydaje mi się, że ta wskazówka i tak by pomogła. – Daniel

+0

Niestety, nie zauważyłem twojego rep. Jeśli uzupełniłeś niektóre szczegóły, wykonałbym czynność: – inspectorG4dget

Powiązane problemy