先建立 id 与所需值的字典关系:
In [9]: l = [{'id':13,'title':'2222','rank':1},{'id':25,'title':'33fff','rank':2},{'id':53,'title':'hhhh','rank':3},{'id':73,'title':'ffff','rank':4},{'id':23,'title':'kkkkk','rank':5}]
In [10]: d = [a['id'] for a in l]
In [11]: s = dict([(d[i], l[i]) for i in range(len(l))])
然后,一个简单的函数就可以调取前后值了:
In [12]: def func(num):
....: n = d.index(num)
....: if n == 0:
....: return s[d[n+1]]
....: elif n == len(d)-1:
return s[d[n-1]]
else:
....: return s[d[n+1]], s[d[n-1]]
....:
最终运行结果:
In [24]: func(73)
Out[24]:
({'id': 23, 'rank': 5, 'title': 'kkkkk'},
{'id': 53, 'rank': 3, 'title': 'hhhh'})
In [25]: func(13)
Out[25]: {'id': 25, 'rank': 2, 'title': '33fff'}
这种方式,效率上相对高一些,一方面字典取值速度更快,另一方面每次寻址都只需要寻一层,且建立的序列和字典可以重复多次调用。
当然,还有一种更高效的方式,但必须导入 collections模块,具体可以参考:
python 的有序字典