2016-11-19 75 views
1

您好我想问问如何有效地削减了价值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

请问' share_link'被嵌套在任何深度? – SuperSaiyan

回答

2

你可以(在j['items']字典)使用for loop statement迭代项目

>>> 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 
0

下面的函数将在obj在任何深度搜索给定的key

(注:以下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'] 
2

单行使用map功能得到格式化输出解决方案:

print '\n'.join(map(lambda i: "Value: %s" % i['share_link'], j['items'])) 

输出:

Value: a 
Value: b 
Value: c 
相关问题