免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1145 | 回复: 7

根据字典列表获取相关数据 [复制链接]

论坛徽章:
3
黄金圣斗士
日期:2015-12-01 13:27:34IT运维版块每日发帖之星
日期:2016-04-30 06:20:0015-16赛季CBA联赛之福建
日期:2018-08-10 14:38:43
发表于 2017-05-31 16:52 |显示全部楼层
本帖最后由 venux 于 2017-05-31 16:55 编辑

复制代码
部门数据
[
{'pid': 0L, 'id': 1L, 'name': u'一级部门'},
{'pid': 1L, 'id': 2L, 'name': u'二级部门'},
{'pid': 2L, 'id': 3L, 'name': u'三级部门'},
{'pid': 3L, 'id': 4L, 'name': u'四级部门'},
{'pid': 4L, 'id': 5L, 'name': u'五级部门'}
]


用户数据
[
{'dept_id': 5L, 'code': u'001', 'id': 1L, 'name': u'weijx'}
]


如上面的数据,能不能根据用户信息中的dept_id获取这个用户所在部门的全路径, /一级部门/二级部门/三级部门/四级部门/五级部门  这样 , 搞了一下午,请大神帮忙看看

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
发表于 2017-05-31 17:11 |显示全部楼层
回复 1# venux


想要的结果是什么样子的?dept_id和第一个列表有设么关系?

论坛徽章:
3
黄金圣斗士
日期:2015-12-01 13:27:34IT运维版块每日发帖之星
日期:2016-04-30 06:20:0015-16赛季CBA联赛之福建
日期:2018-08-10 14:38:43
发表于 2017-05-31 18:43 |显示全部楼层
回复 2# zxy877298415

比如我自己建个表 ,一个字段存储用户部门全路径 ,就上面我写的  这样      /一级部门/二级部门/三级部门/四级部门/五级部门



dept_id  是外键  对应部门表  的id字段

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
发表于 2017-05-31 20:58 |显示全部楼层
回复 3# venux


dept=[
{'pid': '0L', 'id': '1L', 'name': u'一级部门'},
{'pid': '1L', 'id': '2L', 'name': u'二级部门'},
{'pid': '2L', 'id': '3L', 'name': u'三级部门'},
{'pid': '3L', 'id': '4L', 'name': u'四级部门'},
{'pid': '4L', 'id': '5L', 'name': u'五级部门'}
]

user=[
{'dept_id': '5L', 'code': u'001', 'id': '1L', 'name': u'weijx'}
]

for i in user:
for j in dept:
  if i['dept_id'] == j['id']:
   print (j['name'])


不知道是不是这样!

论坛徽章:
3
黄金圣斗士
日期:2015-12-01 13:27:34IT运维版块每日发帖之星
日期:2016-04-30 06:20:0015-16赛季CBA联赛之福建
日期:2018-08-10 14:38:43
发表于 2017-06-01 09:50 |显示全部楼层
回复 4# zxy877298415

这个我知道只能得到最后一级部门名称, 我写了一个函数自己回调 ,好像是死循环了

论坛徽章:
3
黄金圣斗士
日期:2015-12-01 13:27:34IT运维版块每日发帖之星
日期:2016-04-30 06:20:0015-16赛季CBA联赛之福建
日期:2018-08-10 14:38:43
发表于 2017-06-01 09:57 |显示全部楼层
回复 4# zxy877298415

可以了  ,昨天我差不多也是这麽写的 ,好像不行 ,今天可以le

#coding:utf-8
dept=[
{'pid': '0L', 'id': '1L', 'name': u'一级部门'},
{'pid': '1L', 'id': '2L', 'name': u'二级部门'},
{'pid': '2L', 'id': '3L', 'name': u'三级部门'},
{'pid': '3L', 'id': '4L', 'name': u'四级部门'},
{'pid': '4L', 'id': '5L', 'name': u'五级部门'}
]

user=[
{'dept_id': '5L', 'code': u'001', 'id': '1L', 'name': u'weijx'}
]


str=''
def get_name(id):
    global str
    for i in dept:
        if i['id']==id and i['pid']!='0':
            str+='/'+i['name']
            get_name(i['pid'])



for j in user:
    get_name(j['dept_id'])
print str

论坛徽章:
3
黄金圣斗士
日期:2015-12-01 13:27:34IT运维版块每日发帖之星
日期:2016-04-30 06:20:0015-16赛季CBA联赛之福建
日期:2018-08-10 14:38:43
发表于 2017-06-01 09:58 |显示全部楼层
回复 4# zxy877298415

可以le,昨天也是这麽写的,不过昨天是从数据库直接读出来处理 ,应该是格式有问题
#coding:utf-8
dept=[
{'pid': '0L', 'id': '1L', 'name': u'一级部门'},
{'pid': '1L', 'id': '2L', 'name': u'二级部门'},
{'pid': '2L', 'id': '3L', 'name': u'三级部门'},
{'pid': '3L', 'id': '4L', 'name': u'四级部门'},
{'pid': '4L', 'id': '5L', 'name': u'五级部门'}
]

user=[
{'dept_id': '5L', 'code': u'001', 'id': '1L', 'name': u'weijx'}
]


str=''
def get_name(id):
    global str
    for i in dept:
        if i['id']==id and i['pid']!='0':
            str+='/'+i['name']
            get_name(i['pid'])



for j in user:
    get_name(j['dept_id'])
print str

论坛徽章:
0
发表于 2017-06-03 18:07 |显示全部楼层
和你的预期不一样吧,是倒过来的
lst=[]
def get_name(id):
    for i in dept:
        if i['id']==id:
            lst.insert(0,i['name'])
            if i['pid']!='0L':
               get_name(i['pid'])
            else:
                lst.insert(0,'')



for j in user:
    get_name(j['dept_id'])

   

str='/'.join(lst)

print str

而且你后面的 i['pid']!='0' 是没有用的(应该写为0L)。你的递归的退出不是靠这个条件,而是靠当pid='0L'时, if i['id]=='0L'  不成立才退出的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP