2010-11-05 108 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) ] 

列表還有保留排序順序的好處。