Get corresponding value from json key in python

2019-09-20 05:50发布

问题:

currently I have the following which parses a json api..

import simplejson
import urllib2

f = urllib2.urlopen('http://fanart.tv/webservice/series/f5b8e776c35e7536eac132802b03281f/80349/json/tvthumb/')  
data = simplejson.load(f)

imagetypes = ['clearlogo', 'clearart', 'tvthumb', 'seasonthumb', 'characterart']

image_list = []
# split "name" and "data"
for title, value in data.iteritems():
# run through specified types
for art in imagetypes:
# if type has been found
    if value.has_key(art):
    # Run through all the items
        for item in value[art]:
            info = {}
            info['url'] = urllib2.quote(item['url'], ':/') # Original image url
            if info:
                image_list.append(info)



print image_list

This returns the following..

[{'url': 'http://fanart.tv/fanart/tv/80349/tvthumb/5287/C_80349%20%284%29.jpg'},
{'url': 'http://fanart.tv/fanart/tv/80349/tvthumb/5286/C_80349%20%285%29.jpg'},
{'url': 'http://fanart.tv/fanart/tv/80349/tvthumb/5288/C_80349%20%283%29.jpg'},
{'url': 'http://fanart.tv/fanart/tv/80349/tvthumb/5289/C_80349%20%282%29.jpg'},
{'url': u'http://fanart.tv/fanart/tv/80349/tvthumb/5290/C_80349.jpg'}, {'url':
'http://fanart.tv/fanart/tv/80349/tvthumb/5291/C_80349%20%280%29.jpg'}]

How do I go about getting just the actual url into a list of urls? If you could explain the steps in your answer so I can learn from it I'd appreciate it. Thanks

回答1:

How about this.

    # your old code avoce
    for item in value[art]:
        url = urllib2.quote(item['url'], ':/') # Original image url
        if url:
            image_list.append(url)


回答2:

>>> urllist = [{'url': 'http://fanart.tv/fanart/tv/80349/tvthumb/5287/C_80349%20%284%29.jpg'},
... {'url': 'http://fanart.tv/fanart/tv/80349/tvthumb/5286/C_80349%20%285%29.jpg'},
... {'url': 'http://fanart.tv/fanart/tv/80349/tvthumb/5288/C_80349%20%283%29.jpg'},
... {'url': 'http://fanart.tv/fanart/tv/80349/tvthumb/5289/C_80349%20%282%29.jpg'},
... {'url': u'http://fanart.tv/fanart/tv/80349/tvthumb/5290/C_80349.jpg'}, {'url':
... 'http://fanart.tv/fanart/tv/80349/tvthumb/5291/C_80349%20%280%29.jpg'}]
>>> [item['url'] for item in urllist]
['http://fanart.tv/fanart/tv/80349/tvthumb/5287/C_80349%20%284%29.jpg', 'http://fanart.tv/fanart/tv/80349/tvthumb/5286/C_80349%20%285%29.jpg', 'http://fanart.tv/fanart/tv/80349/tvth
umb/5288/C_80349%20%283%29.jpg', 'http://fanart.tv/fanart/tv/80349/tvthumb/5289/C_80349%20%282%29.jpg', u'http://fanart.tv/fanart/tv/80349/tvthumb/5290/C_80349.jpg', 'http://fanart.
tv/fanart/tv/80349/tvthumb/5291/C_80349%20%280%29.jpg']

That should give you the urls that you need but it seems like this:

for item in value[art]:
    info = {}
    info['url'] = urllib2.quote(item['url'], ':/') # Original image url
    if info:
        image_list.append(info)

Could be simplified to this:

for item in value[art]:
    url = urllib2.quote(item(['url'], ':/')
    if url:
      image_list.append(url)