By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,600 Members | 1,683 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,600 IT Pros & Developers. It's quick & easy.

Sorting Countries by Region

P: n/a
Hi all,

I'm analyzing some data that has a lot of country data. What I need
to do is sort through this data and output it into an excel doc with
summary information. The countries, though, need to be sorted by
region, but the way I thought I could do it isn't quite working out.
So far I can only successfully get the data alphabetically.

Any ideas?

import xlrd
import pyExcelerator

def get_countries_list(list):
countries_list=[]
for country in countries:
if country not in countries_list:
countries_list.append(country)

EU = ["Austria","Belgium", "Cyprus","Czech Republic",
"Denmark","Estonia", "Finland"]
NA = ["Canada", "United States"]
AP = ["Australia", "China", "Hong Kong", "India", "Indonesia",
"Japan"]
Regions_tot = {'European Union':EU, 'North America':NA, 'Asia
Pacific':AP,}

path_file = "c:\\1\country_data.xls"
book = xlrd.open_workbook(path_file)
Counts = book.sheet_by_index(1)
countries= Counts.col_values(0,start_rowx=1, end_rowx=None)

get_countries_list(countries)

wb=pyExcelerator.Workbook()
matrix = wb.add_sheet("matrix")

n=1
for country in unique_countries:
matrix.write(n,1, country)
n = n+1

wb.save('c:\\1\\matrix.xls')

Nov 16 '07 #1
Share this Question
Share on Google+
6 Replies


P: n/a
Just a few notes:

1) get_countries_list

What is the purpose of that function? Besides a few errors (an
argument named list, no value returned), it seems you just want to
remove duplicates from a list called countries. You can do that
transforming the list to a 'set'.

new_countries = list( set(countries) )

2) I would suggest using countries.sort(...) or sorted(countries,...),
specifying cmp or key options too sort by region instead.

3) Instead of doing this:

for country in unique_countries:
matrix.write(n,1, country)
n = n+1

Do something like

for i, cou in enumerate(unique_countries):
matrix.write(1+i, 1, cou)

(so you dont need to increment the 'i' variable manually)
On Nov 16, 2007 2:13 PM, <pa***********@gmail.comwrote:
Hi all,

I'm analyzing some data that has a lot of country data. What I need
to do is sort through this data and output it into an excel doc with
summary information. The countries, though, need to be sorted by
region, but the way I thought I could do it isn't quite working out.
So far I can only successfully get the data alphabetically.

Any ideas?

import xlrd
import pyExcelerator

def get_countries_list(list):
countries_list=[]
for country in countries:
if country not in countries_list:
countries_list.append(country)

EU = ["Austria","Belgium", "Cyprus","Czech Republic",
"Denmark","Estonia", "Finland"]
NA = ["Canada", "United States"]
AP = ["Australia", "China", "Hong Kong", "India", "Indonesia",
"Japan"]
Regions_tot = {'European Union':EU, 'North America':NA, 'Asia
Pacific':AP,}

path_file = "c:\\1\country_data.xls"
book = xlrd.open_workbook(path_file)
Counts = book.sheet_by_index(1)
countries= Counts.col_values(0,start_rowx=1, end_rowx=None)

get_countries_list(countries)

wb=pyExcelerator.Workbook()
matrix = wb.add_sheet("matrix")

n=1
for country in unique_countries:
matrix.write(n,1, country)
n = n+1

wb.save('c:\\1\\matrix.xls')

--
http://mail.python.org/mailman/listinfo/python-list
Nov 16 '07 #2

P: n/a
pa***********@gmail.com wrote:
Hi all,

I'm analyzing some data that has a lot of country data. What I need
to do is sort through this data and output it into an excel doc with
summary information. The countries, though, need to be sorted by
region, but the way I thought I could do it isn't quite working out.
So far I can only successfully get the data alphabetically.

Any ideas?

import xlrd
import pyExcelerator

def get_countries_list(list):
it isn't a good idea to use a built-in object as a variable name
countries_list=[]
for country in countries:ii
if country not in countries_list:
countries_list.append(country)

EU = ["Austria","Belgium", "Cyprus","Czech Republic",
"Denmark","Estonia", "Finland"]
NA = ["Canada", "United States"]
AP = ["Australia", "China", "Hong Kong", "India", "Indonesia",
"Japan"]
Regions_tot = {'European Union':EU, 'North America':NA, 'Asia
Pacific':AP,}
i would create a class to capture country information, e.g.
class country(object):
def __init__(self, name, size = 0, population = 0):
self.name = name
self.size = size
self.poplation = population

def __cmp__(self, other):
if self.name < other.name:
return -1
elif self.name other.name:
return 1
else:
return 0

then you can set up the world as

world = {'NA': [country("United States"), country("Canada")], \
'Europe': [country("Belgium"), country("Austria")]}
now you can sort and print it easy

for region in world:
print region
lands = world[region]
lands.sort()
for land in lands:
print land.name

the sort works because the country objects have a method __cmp__
>
path_file = "c:\\1\country_data.xls"
book = xlrd.open_workbook(path_file)
Counts = book.sheet_by_index(1)
countries= Counts.col_values(0,start_rowx=1, end_rowx=None)

get_countries_list(countries)

wb=pyExcelerator.Workbook()
matrix = wb.add_sheet("matrix")

n=1
for country in unique_countries:
matrix.write(n,1, country)
n = n+1

wb.save('c:\\1\\matrix.xls')
i'm not familiar with the excel modules so i can't help you with that
Nov 16 '07 #3

P: n/a
On Nov 16, 8:28 pm, martyw <wit...@kpnplanet.nlwrote:
>
i would create a class to capture country information, e.g.
<snip>

What is the advantage of this:
def __cmp__(self, other):
if self.name < other.name:
return -1
elif self.name other.name:
return 1
else:
return 0
over
def __cmp__(self,other):
return cmp(self.name,other.name)

?

--
Alan
Nov 16 '07 #4

P: n/a
En Sat, 17 Nov 2007 08:34:43 -0300, <pa***********@gmail.comescribió:
for i, country in countries_list:
if country in REGIONS_COUNTRIES['European Union']:
matrix.write(i+2, 1, country)
but I got "ValueError: too many values to unpack"
Remove the i, and try again...

--
Gabriel Genellina

Nov 17 '07 #5

P: n/a

On Sat, 2007-11-17 at 03:34 -0800, pa***********@gmail.com wrote:
#This seems to not work today and I don't know why
#for country in countries_list:
# if country not in REGIONS_COUNTRIES['European Union'] or not in
REGIONS_COUNTRIES['North America']:
# print "%s is not in the expected list", country
This snippet fails because you want 'and' rather than 'or'. In this
one, you test to see that country is not in EU, and if you have, say
'France' as your country, the first half evaluates false, so the or
tells it to try again with North America. Lo and behold, france is not
in North America, so the second half returns true. False or True
returns True, so your code prints "France is not in the expected list."

Cheers,
Cliff
Nov 17 '07 #6

P: n/a
nothing, Alan wrote:
On Nov 16, 8:28 pm, martyw <wit...@kpnplanet.nlwrote:
>i would create a class to capture country information, e.g.
<snip>

What is the advantage of this:
> def __cmp__(self, other):
if self.name < other.name:
return -1
elif self.name other.name:
return 1
else:
return 0

over
def __cmp__(self,other):
return cmp(self.name,other.name)

?

--
Alan
yours is better!
Nov 19 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.