#!/usr/bin/python

# comparison function for use by list.sort to sort elements based on the second
# element of the tuples
# first and second should be two element tuples with an integer weight being 
# the second element of each
def rev_weighted_tuple_cmp(first, second):

   # if first tuple is greater than the second	
   if first[1] > second[1]:
      return -1

   # if the tuples are equal	
   elif first[1] == second[1]:
      return 0

   # if the first tuple is less than the second
   else:
      return 1

# function to return a list from a list of weighted tuples 
# list_of_tuples should be a list of two element tuples of which the second 
# element is an integer weight
# returns a list of elements which are the first elements of each tuple. the
# list is sorted in descending order based on the weighting
def weighted_list(list_of_tuples):

   # sort the list of tuples based on the weight
   list_of_tuples.sort(rev_weighted_tuple_cmp)

   # build the return list of just the first elements
   # initialize the list with first element
   ret_list = [list_of_tuples[0][0]]
  
   # start the index at one since we already added the first element
   index = 1

   # add the remaining elements
   while index < len(list_of_tuples):
      ret_list.append(list_of_tuples[index][0])
      index = index+1

   # return the list
   return ret_list


# test tuples
a = ('test1.fedoraproject.org',30)
b = ('test2.fedoraproject.org',5)
c = ('test3.fedoraproject.org',45)
d = ('test4.fedoraproject.org',10)

# test list of tuples
l = [a,b,c,d,a,b,c,d]
print l

# create new list
new_list = weighted_list(l)
print new_list

   
