更新OrderedDict获取无

时间:2014-03-11 14:36:02

标签: python python-2.7 python-3.x

这是我的清单,

z=[OrderedDict([('name', 'abc'), ('lastname', 'lastname.'), ('address', 'Mumbai'), ('cell', '21******')]), OrderedDict([('name', 'abc'), ('lastname', 'lastname.'), ('address', 'Mumbai'), ('cell', '21******')]), OrderedDict([('name', 'xyz'), ('lastname', 'lastnamexyz.'), ('address', 'Heaven'), ('cell', '2156******')])]

我正在尝试更改此词典的键,

我在尝试什么,

>>> temp_lst=[]
>>> for i in z:
    newo=OrderedDict()
    temp_lst.append(newo.update(Name=i.get('name'),Lastname=i.get('lastname')))
>>> print temp_lst
    [None, None, None]

此代码将tmp_lst打印为[None, None, None]

但是当我尝试跟随时,得到了正确的结果。

>>> for i in z:
    newo=OrderedDict()
    newo.update(Name=i.get('name'),Lastname=i.get('lastname'))
    temp_lst.append(newo)   
>>> temp_lst
[OrderedDict([('Lastname', 'lastname.'), ('Name', 'abc')]), OrderedDict([('Lastname', 'lastname.'), ('Name', 'abc')]), OrderedDict([('Lastname', 'lastnamexyz.'), ('Name', 'xyz')])]

这两个代码看起来和我在第一种情况下获得[None, None, None]并在第二种情况下获得正确输出的原因相同?

3 个答案:

答案 0 :(得分:3)

dict.update始终返回None,因此在第一个示例中,您追加None三次,而在第二个示例中,您将dict对象追加三次。

答案 1 :(得分:2)

因为newo.update()没有返回任何内容(所以你得到None)。

答案 2 :(得分:1)

下面

temp_lst.append(newo.update(Name=i.get('name'),Lastname=i.get('lastname')))

您实际上是将newo.update的返回值添加到列表中,恰好是None。在第一个示例中,您首先更新dict,然后将dict本身附加到temp_lst。这有所不同