python字典列表根据指定元素取值
大家讲道理
大家讲道理 2017-04-17 17:21:52
[Python讨论组]
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}]

这个列表是根据rank排序的,现在我想根据指定的id获取前一个和后一个对象
比如,id=73时,获取到{'id':53,'title':'hhhh','rank':3}和{'id':23,'title':'kkkkk','rank':5}

id=13时,获取到{'id':25,'title':'33fff','rank':2}

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
阿神
# encoding=utf-8

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}]


def get_By_Id(id):
    l_a = []
    for i in xrange(len(l)):
        if l[i]['id'] == id:
            if(i > 0):
                l_a.append(l[i-1])
            if(i < len(l)-1):
                l_a.append(l[i+1])
    return l_a

x = get_By_Id(23)
print x
阿神

先建立 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 的有序字典

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号