在一个字典里,如何剪出一个特殊的值

2024-05-17 04:03:21 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我想问一下如何有效地切出值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

Tags: 方法代码sharegetvaluelinkitems速度
3条回答

使用map函数获得格式化输出的一行解决方案:

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

输出:

Value: a
Value: b
Value: c

您可以使用^{} 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

下面的函数将在任何深度的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']

相关问题 更多 >