更新OrderedDict时得到None
这是我的列表,
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 个回答
1
这里
temp_lst.append(newo.update(Name=i.get('name'),Lastname=i.get('lastname')))
你实际上是把newo.update
的返回值加到了列表里,而这个返回值恰好是None
。在第一个例子中,你先更新了字典,然后再把这个字典本身添加到temp_lst
里。这是有区别的。
2
因为 newo.update() 这个函数不返回任何东西(所以你得到的是 None)。
3
dict.update
这个方法总是返回 None
,所以在第一个例子中,你实际上是把 None
添加了三次,而在第二个例子中,你是把字典对象添加了三次。