Technologic27
Technologic27

Reputation: 351

IndexError: string index out of range python

I have the following list:

url_sims1=[('http://bp.velocityfrequentflyer.com/',
  [(2, 0.90452874),
   (1, 0.83522302),
   (4, 0.77591574),
   (0, 0.72705799),
   (3, 0.52282226)]),
 ('http://cartrawler.virginaustralia.com/',
  [(3, 0.79298556),
   (1, 0.78112978),
   (2, 0.76006395),
   (0, 0.58570701),
   (4, 0.40093967)]),
 ('https://cartrawler.virginaustralia.com/book',
  [(2, 0.9549554),
   (1, 0.71705657),
   (0, 0.58731651),
   (3, 0.43987277),
   (4, 0.38266104)]),
 ('https://fly.virginaustralia.com/SSW2010/VAVA/webqtrip.html',
  [(2, 0.96805269),
   (4, 0.68034023),
   (1, 0.66391909),
   (0, 0.64251828),
   (3, 0.50730866)]),
 ('http://www.magicmillions.com.au/',
  [(2, 0.84748113),
   (4, 0.8338449),
   (1, 0.61795002),
   (0, 0.60271078),
   (3, 0.20899911)])]

I want to replace this order

(2,...) 
(1,...)
(4,...) 
(0,...) 
(3,...)

with the following strings: categories=['arts and entertainment', 'points of passion', 'active lifestyle', 'consumer habits', 'travel savvy']. so for example, '2' will be replaced by categories[2]

I have written the following code:

for i in xrange(0, len(unique_url)): 
    for j in xrange(0, len(sims1)):
        for k in xrange(0,len(categories)):
            url_sims1[i][j][k][1]+=categories[k] 

But I am getting this error: IndexError: string index out of range

unique_url=['http://bp.velocityfrequentflyer.com/',
 'http://cartrawler.virginaustralia.com/',
 'https://cartrawler.virginaustralia.com/book',
 'https://fly.virginaustralia.com/SSW2010/VAVA/webqtrip.html',
 'http://www.magicmillions.com.au/']

sims1=[[(2, 0.90452874),(1, 0.83522302),(4, 0.77591574),(0, 0.72705799),(3, 0.52282226)],
 [(3, 0.79298556),(1, 0.78112978),(2, 0.76006395),(0, 0.58570701),(4, 0.40093967)],
 [(2, 0.9549554),(1, 0.71705657),(0, 0.58731651),(3, 0.43987277),(4, 0.38266104)],
 [(2, 0.96805269),(4, 0.68034023),(1, 0.66391909),(0, 0.64251828),(3, 0.50730866)],
 [(2, 0.84748113),(4, 0.8338449),(1, 0.61795002),(0, 0.60271078),(3, 0.20899911)]]

Upvotes: 1

Views: 210

Answers (1)

John1024
John1024

Reputation: 113994

Given that you have url_sims1 and categories, then try:

In [4]: [(url, [(categories[i], x) for i,x in lst]) for url,lst in url_sims1]
Out[4]: 
[('http://bp.velocityfrequentflyer.com/',
  [('active lifestyle', 0.9045),
   ('points of passion', 0.8352),
   ('travel savvy', 0.7759),
   ('arts and entertainment', 0.7271),
   ('consumer habits', 0.5228)]),
 ('http://cartrawler.virginaustralia.com/',
  [('consumer habits', 0.793),
   ('points of passion', 0.7811),
   ('active lifestyle', 0.7601),
   ('arts and entertainment', 0.5857),
   ('travel savvy', 0.4009)]),
 ('https://cartrawler.virginaustralia.com/book',
  [('active lifestyle', 0.955),
   ('points of passion', 0.7171),
   ('arts and entertainment', 0.5873),
   ('consumer habits', 0.4399),
   ('travel savvy', 0.3827)]),
 ('https://fly.virginaustralia.com/SSW2010/VAVA/webqtrip.html',
  [('active lifestyle', 0.9681),
   ('travel savvy', 0.6803),
   ('points of passion', 0.6639),
   ('arts and entertainment', 0.6425),
   ('consumer habits', 0.5073)]),
 ('http://www.magicmillions.com.au/',
  [('active lifestyle', 0.8475),
   ('travel savvy', 0.8338),
   ('points of passion', 0.618),
   ('arts and entertainment', 0.6027),
   ('consumer habits', 0.209)])]

Alternatively, if your starting point is unique_url and sims1, then try:

 [(url, [(categories[i], x) for i,x in lst]) for url,lst in zip(unique_url, sims1)]

Upvotes: 1

Related Questions