读书人

问两个取值有关问题

发布时间: 2013-06-19 10:26:41 作者: rapoo

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

xml我倒能用xpath快提

其实现在最大问题是要传参给一个fun来提取,不知道参数怎么写好
[解决办法]
自己定义一个类
把values用自己的类实现?
[解决办法]

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)

是想这样么?
[解决办法]
那你先确定,是要传入个固定path(是/aaa/*/bbb,而不是/ccc/*/bbb),还是说某个层(第二层,第三层,还是第N层)。

引用:
N
我要传入的参数是 /aaa/*/bbb,单纯bbb不能确定是哪一层
Quote: 引用:

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)


是想这样么?

[解决办法]
自己实现一个简易版的xpath,这是你说的旁门左道吗?
[解决办法]
jsonpath:

http://goessner.net/articles/JsonPath/

python jpath:

https://github.com/aruiz/python-jpath/

读书人网 >perl python

热点推荐