问两个取值问题

ImN1 2013-05-06 09:03:43
python
两个问题类似,解决其中一个应该就能解决另一个
1.如何简单快速从字典中提取一组值?
例如 a={'aaa':[{'bbb':1}{'bbb':2}]} 提取全部'bbb'的值
2.类似地,上述结构如果是json,如何?

xml我倒能用xpath快提

其实现在最大问题是要传参给一个fun来提取,不知道参数怎么写好
...全文
164 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ImN1 2013-05-07
  • 打赏
  • 举报
回复
N,xpath方式还没实现,没有思路
引用 8 楼 panghuhu250 的回复:
自己实现一个简易版的xpath,这是你说的旁门左道吗?
panghuhu250 2013-05-07
  • 打赏
  • 举报
回复
panghuhu250 2013-05-07
  • 打赏
  • 举报
回复
自己实现一个简易版的xpath,这是你说的旁门左道吗?
ImN1 2013-05-06
  • 打赏
  • 举报
回复
大致是这样,向一个fun传入一个json和"路径"参数,根据路径提取值,返回列表或字典(只有一维)
乔巴好萌 2013-05-06
  • 打赏
  • 举报
回复
自己定义一个类 把values用自己的类实现?
ImN1 2013-05-06
  • 打赏
  • 举报
回复
旁门左道的办法倒是写出来了,还是等等有什么好意见吧
ImN1 2013-05-06
  • 打赏
  • 举报
回复
aaa就是key,path对应json是唯一的,但不同的json就path不同了,不能固定 如果固定,我自己都写得出来
pele7 2013-05-06
  • 打赏
  • 举报
回复
那你先确定,是要传入个固定path(是/aaa/*/bbb,而不是/ccc/*/bbb),还是说某个层(第二层,第三层,还是第N层)。
引用 5 楼 snmr_com 的回复:
N 我要传入的参数是 /aaa/*/bbb,单纯bbb不能确定是哪一层 [quote=引用 4 楼 pele7 的回复:]
def fun_dict(key, dictArr):
    tmp =[]
    for k in dictArr:
        if k == key:
            tmp.append(dictArr[k])
        elif isinstance(dictArr[k], dict):
            tmp = tmp + fun_dict(key, dictArr[k])
        elif isinstance(dictArr[k] , list):
            tmp = tmp + fun_list(key, dictArr[k])
    return tmp
def fun_list(key, listArr):
    tmp = []
    for v in listArr:
        if isinstance(v, dict):
            tmp = tmp + fun_dict(key, v)
        elif isinstance(v, list):
            tmp = tmp + fun_list(key, v)
    return tmp

if __name__ == '__main__':
    a={'aaa':[{'bbb':1},{'bbb':2}]}
    print fun_dict('bbb',a)
是想这样么?
[/quote]
ImN1 2013-05-06
  • 打赏
  • 举报
回复
N 我要传入的参数是 /aaa/*/bbb,单纯bbb不能确定是哪一层
引用 4 楼 pele7 的回复:
def fun_dict(key, dictArr):
    tmp =[]
    for k in dictArr:
        if k == key:
            tmp.append(dictArr[k])
        elif isinstance(dictArr[k], dict):
            tmp = tmp + fun_dict(key, dictArr[k])
        elif isinstance(dictArr[k] , list):
            tmp = tmp + fun_list(key, dictArr[k])
    return tmp
def fun_list(key, listArr):
    tmp = []
    for v in listArr:
        if isinstance(v, dict):
            tmp = tmp + fun_dict(key, v)
        elif isinstance(v, list):
            tmp = tmp + fun_list(key, v)
    return tmp

if __name__ == '__main__':
    a={'aaa':[{'bbb':1},{'bbb':2}]}
    print fun_dict('bbb',a)
是想这样么?
pele7 2013-05-06
  • 打赏
  • 举报
回复
def fun_dict(key, dictArr):
    tmp =[]
    for k in dictArr:
        if k == key:
            tmp.append(dictArr[k])
        elif isinstance(dictArr[k], dict):
            tmp = tmp + fun_dict(key, dictArr[k])
        elif isinstance(dictArr[k] , list):
            tmp = tmp + fun_list(key, dictArr[k])
    return tmp
def fun_list(key, listArr):
    tmp = []
    for v in listArr:
        if isinstance(v, dict):
            tmp = tmp + fun_dict(key, v)
        elif isinstance(v, list):
            tmp = tmp + fun_list(key, v)
    return tmp

if __name__ == '__main__':
    a={'aaa':[{'bbb':1},{'bbb':2}]}
    print fun_dict('bbb',a)
是想这样么?

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧