Python字典没有更新

时间:2010-11-05 20:20:11

标签: python

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

4 个答案:

答案 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}},nameagelocation个键 - 而且您不会我想要那个。您希望使用包含键dict1iddict1和{{的其他词典更新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) ]

列表具有保留排序顺序的额外好处。