在一个词典中,如何削减特殊价值

时间:2016-11-19 09:53:06

标签: python python-2.7 list dictionary

您好,我想问一下如何有效地减少价值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

3 个答案:

答案 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']