def mergeDict(object):
dict1 = {}
for i in range(len(object)):
dict1.update({'id': object[i].id, 'name': object[i].name, 'age': object[i].age, 'location': object[i].location})
return dict1
merged_dict = mergeDict(details_sorted)
但这不起作用。
我想得到这样的东西:
{1: {'id': 1, 'name': 'John', 'age': '25'; 'location': 'somewhere'},
2: {'id': 2, 'name': ......}}
答案 0 :(得分:5)
看起来return语句在for循环中,这意味着它只会返回第一个dict的更新。
答案 1 :(得分:3)
你不想update
这个词;您只想在键i
上插入一个值。此外,返回在之后,而不是在其中。这是一个修改版本:
def mergeDict(object):
dict1 = {}
for i in range(len(object)):
dict1[i] = {'id': object[i].id, 'name': object[i].name, 'age': object[i].age, 'location': object[i].location}
return dict1
merged_dict = mergeDict(details_sorted)
您的update
版本会更新id
的{{1}},name
,age
和location
个键 - 而且您不会我想要那个。您希望使用包含键dict1
,id
,dict1
和{{的其他词典更新id
的{{1}}键1}}。
答案 2 :(得分:1)
做一些实验。
def mergeDict(object):
dict1 = {}
dict1.update({'id': 'object[i].id', 'name': 'object[i].name', 'age': 'object[i].age', 'location': 'object[i].location'})
dict1.update({'id': 'object[j].id', 'name': 'object[j].name', 'age': 'object[j].age', 'location': 'object[j].location'})
return dict1
merged_dict = mergeDict(None)
print merged_dict
输出:
{'name': 'object[j].name', 'age': 'object[j].age', 'location': 'object[j].location', 'id': 'object[j].id'}
错误:
仅保留最后的对象值,因为所有对象的键都相同。所以for循环没有效果。
就像说
x = {}
x['k'] = y
x['k'] = z
只有一个键 - k,它的最新值是z
答案 3 :(得分:1)
Python 3.0中的单行程序:
merged_dict = {i: dict(id=o.id, name=o.name, age=o.age, location=o.location)
for i, o in enumerate(details_sorted)}
如果结果键是连续的整数,为什么不是列表而不是dict?
merged = [ dict(id=o.id, name=o.name, age=o.age, location=o.location)
for i, o in enumerate(details_sorted) ]
列表具有保留排序顺序的额外好处。