I have such a method which takes a URL, such as http://twitter.com/ttt or twitter.com/dasd, and should show its domain with http: http://twitter.com and name twitter
def show_domain(url):
sites = {
'twitter': ['http://www.twitter.com/', 'twitter'],
'facebook': ['http://www.facebook.com/', 'facebook'],
'pininterest': ['http://www.pininterest.com/', 'pininterest']
}
if sites['twitter'][0] in url:
link = sites['twitter'][0]
brand = sites['twitter'][1]
elif sites['facebook'][0] in url:
link = sites['facebook'][0]
brand = sites['facebook'][1]
else:
link = sites['pininterest'][0]
brand = sites['pininterest'][1]
return link, brand
Is there way to optimise this code?
1 Answer 1
You can use tuple unpacking/list unpacking to write :
if sites['twitter'][0] in url:
link, brand = sites['twitter']
elif sites['facebook'][0] in url:
link, brand = sites['facebook']
else:
link, brand = sites['pininterest']
return link, brand
Now, the data structure you are using is a bit akward because you don't use the key at all. Instead of mapping string to list of strings, you could have a list of list of strings. Even better, you could use list of tuple of strings :
sites = [
('http://www.twitter.com/', 'twitter'),
('http://www.facebook.com/', 'facebook'),
('http://www.pininterest.com/', 'pininterest')
]
if sites[0][0] in url:
link, brand = sites[0]
elif sites[1][0] in url:
link, brand = sites[1]
else:
link, brand = sites[2]
return link, brand
Now, this seems to be begging to be written with a loop
for (link, brand) in sites:
if link in url:
return link, brand
return None # or anything you like
-
\$\begingroup\$ but it local variables link, brand are unused, pycharm says \$\endgroup\$user2424174– user24241742014年08月12日 11:14:40 +00:00Commented Aug 12, 2014 at 11:14
-
1\$\begingroup\$ @user2424174 then it is a bug in pycharm, because they are being returned, so used. \$\endgroup\$Davidmh– Davidmh2014年08月12日 12:34:33 +00:00Commented Aug 12, 2014 at 12:34
urlparse
module? \$\endgroup\$