更新OrderedDict时得到None

0 投票
3 回答
740 浏览
提问于 2025-04-17 21:48

这是我的列表,

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 添加了三次,而在第二个例子中,你是把字典对象添加了三次。

撰写回答