2016-11-19 71 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 
相關問題