2010-11-05 105 views
2
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) 

但是,这是行不通的。Python字典没有更新

我想是这样的:

{1: {'id': 1, 'name': 'John', 'age': '25'; 'location': 'somewhere'}, 
2: {'id': 2, 'name': ......}} 
+0

我有点好奇,为什么你需要键入自己的排序的整数值等辞书字典。 – 2010-11-05 20:30:30

+0

字典((x.id,乏用于对象X(X))) – 2010-11-05 20:33:51

回答

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版本将有更新的dict1idnameagelocation键 - 你不希望这样。你想与含idnameagelocation另一个字典更新的dict1id关键。

5

它看起来像return语句是在for循环,这意味着它仅会返回第一个字典的更新。

+0

谢谢,这是问题的一部分。 – user216171 2010-11-05 20:37:05

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

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

如果结果键是连续的整数,为什么不是一个列表而不是字典?

merged = [ dict(id=o.id, name=o.name, age=o.age, location=o.location) 
         for i, o in enumerate(details_sorted) ] 

列表还有保留排序顺序的好处。