您好,我想问一下如何有效地减少价值share_link
我的代码
j = {
u'items': [{u'annotations': [], u'share_link': u'a'},
{u'annotations': [], u'share_link': u'b'},
{u'annotations': [], u'share_link': u'c'},]
}
我的第一次尝试是print "Value: %s" % j.get('items')[0]['share_link']
它有效,但速度太慢,例如如果share_link
有20次:
print "Value: %s" % j.get('items')[0]['share_link']
print "Value: %s" % j.get('items')[1]['share_link']
...
print "Value: %s" % j.get('items')[19]['share_link']
请问,有没有更有效的方法来削减这个价值?
这样的事情:
b = j.findall(‘share_link’)
# print every share_link value
答案 0 :(得分:2)
您可以使用for
loop statement来迭代项目(j['items']
中的词典)
>>> j = {u'items': [
... {u'annotations': [], u'share_link': u'a'},
... {u'annotations': [], u'share_link': u'b'},
... {u'annotations': [], u'share_link': u'c'},
... ]}
>>>
>>> for item in j['items']: # Iterate each item
... print('Value: %s' % item['share_link'])
...
Value: a
Value: b
Value: c
答案 1 :(得分:2)
map
函数获取格式化输出的单行解决方案:
print '\n'.join(map(lambda i: "Value: %s" % i['share_link'], j['items']))
输出:
Value: a
Value: b
Value: c
答案 2 :(得分:0)
以下功能会在key
的任意深度搜索给定的obj
。
(注:下面的Python2)
>>> def search(obj, key):
... if isinstance(obj, list):
... for item in obj:
... for res in search(item, key):
... yield res
... elif isinstance(obj, dict):
... for k, v in obj.items():
... if key == k:
... yield v
... for res in search(v, key):
... yield res
...
>>> list(search(a, "share_link"))
['a', 'b', 'c']