2014-04-21 32 views
6

Bu satırda bir hatam var. Bir ithalat ile bir dosyadan bir sözlük ile çalışıyorum.python sözlük hatası AttributeError: 'list' nesnesi 'keys' özelliğine sahip değil

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

Ve iş aşağıdaki gibidir hangi yöntem: Bu sözlüğüdür

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

Nerede "dict" "kullanıcılar" olacağını, ancak hata Sözlük tanımıyor olmasıdır bende böyle Birisi bana söyleyebilir misin, sözlükte yanlış var mı?

+0

Kişisel 'users' değişkenden anahtarları dicts bir dict içine anonim dicts listesini çeviriyor aslında sözlüklere listesidir. –

cevap

6

Belki sana yeni sözlüğünü oluşturma üzerinde basitleştirilmiş bir yaklaşımla bu satırlar boyunca bir şey yapmak isteyen:

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'}} 

Sonra yapabilirsiniz:

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

Esasen, bu anahtar 'id'

6

Bu bir diksiyon değil, sözlüklerin listesi!
DÜZENLEME: Ve bu biraz daha cevap tarzı bir hale getirmek için:

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'}} 

dawgs cevap olarak temelde aynı olmakla birlikte,

+0

Bu bir cevap değil, bir yorum! – inspectorG4dget

+0

Haklısın, ama 50 itibarı olmadan yorum yapamam (ki bunu yapardım). Ama bana öyle geliyor ki, bu ipucu yine de yardımcı olabilirdi. – Daniel

+0

Üzgünüm, temsilcinizi farketmediniz. Bazı detayları çözdüyseniz, – inspectorG4dget

İlgili konular