python字典错误 AttributeError: 'list'对象没有属性'keys
我在这一行代码上遇到了错误。我正在处理一个从文件导入的字典。这个字典是:
users = [{'id':1010,'name':"Administrator",'type':1},{'id':1011,'name':"Administrator2",'type':1}]
我用来工作的方式如下:
def addData(dict, entry):
new = {}
x = 0
for i in dict.keys():
new[i] = entry(x)
x += 1
dict.append(new)
这里的“dict”应该是“users”,但是错误是字典没有把我识别为这样。有人能告诉我,我在字典里做错了什么吗?
2 个回答
13
这不是一个字典,而是一组字典的列表!
编辑:为了让这个更像个答案,我再补充一下:
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'}}
这基本上和dawg的回答是一样的,只是用了一种更简单的方法来生成新的字典。
11
也许你想做的事情是这样的:
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'}}
然后你可以这样做:
>>> new_dict[1010]
{'type': 1, 'name': 'Administrator'}
简单来说,这个操作是把一堆没有名字的字典(dict)转换成一个以某个键(这里是 'id'
)为键的字典的字典。
你可以用一行代码更简洁地完成这个操作:
new_dict={d['id']:{k: d[k] for k in d.keys() - {'id'}} for d in users}
# {1010: {'type': 1, 'name': 'Administrator'}, 1011: {'type': 1, 'name': 'Administrator2'}}