Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python dictionary error AttributeError: 'list' object has no attribute 'keys'

I have an error with this line. I am working with a dictionary from a file with an import. This is the dictionary:

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

And the method with which the work is as follows:

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

Where "dict" would be "users", but the error is that the dictionary does not recognize me as such. Can anyone tell me, I have wrong in the dictionary?

like image 940
Ginko Avatar asked Apr 21 '14 02:04

Ginko


2 Answers

That's not a dicionary, it's a list of dictionaries!
EDIT: And to make this a little more answer-ish:

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

Which is essentially the same as dawgs answer, but with a simplified approach on generating the new dictionary

like image 64
Daniel Avatar answered Oct 06 '22 02:10

Daniel


Perhaps you are looking to do something along these lines:

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

Then you can do:

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

Essentially, this is turning a list of anonymous dicts into a dict of dicts that are keys from the key 'id'

like image 27
dawg Avatar answered Oct 06 '22 02:10

dawg