Следующий подход достаточно близок к вашей реализации, и я думаю, что это может быть полезно. Однако, если вы начнете работать с более крупными или более сложными файлами csv, вы должны изучить пакеты, такие как «csv.reader» или «Pandas» (как упоминалось ранее). Они более надежны и эффективны при работе со сложными данными .csv. Вы также можете работать через Excel с пакетом «xlrd».
На мой взгляд, самым простым решением для ссылки на названия стран с их соответствующими значениями является объединение ваших «циклов». Вместо того, чтобы дважды перебирать ваши данные (в двух отдельных «для циклов») и создавать два отдельных списка, используйте один «цикл» и создайте словарь с соответствующими данными (например, «имя страны», «hdi»). Вы также можете создать кортеж (как упоминалось ранее), но я думаю, что словари более явны.
myfile = open("/Users/it/Desktop/Python/In-Class Programs/countries.csv", "rb")
countries = []
for line in myfile:
country_name = line.split(",")[1]
value_of_interest = float(line.split(",")[3])
countries.append(
{"Country Name": country_name,
"Value of Interest": value_of_interest})
ave_value = sum([country["Value of Interest"] for country in countries])/len(countries)
max_value = max([country["Value of Interest"] for country in countries])
min_value = min([country["Value of Interest"] for country in countries])
print "Country Average == ", ave_value
for country in countries:
if country["Value of Interest"] == max_value:
print "Max == {country}:{value}".format(country["Country Name"], country["Value of Interest"])
if country["Value of Interest"] == min_value:
print "Min == {country}:{value}".format(country["Country Name"], country["Value of Interest"])
Обратите внимание, что этот метод возвращает несколько стран, если они имеют равные минимальные/максимальные значения.
Если вы мертвы-набор на создание отдельных списков (например, текущей реализации), вы могли бы рассмотреть почтовый индекс() для подключения списков (по индексу), где
zip(countries, hdi_list) = [(countries[1], hdi_list[1]), ...]
Например:
for country in zip(countries, hdi_list):
if country[1] == max_value:
print country[0], country[1]
с аналогичной логикой, применяемой к минимуму и среднему значению. Этот метод работает, но менее ясен и сложнее поддерживать.
Возможно, используйте словарь вместо списка? Укажите страны как ключи и ценности как ценности? Затем найдите ключ для самого высокого значения? – ArtOfWarfare
Это текстовый файл, почему бы не открыть его в текстовом режиме '... 'rt')' – Yetti99
Вы уверены, что этот код работает?В названиях стран есть запятые, в этом случае должно быть дополнительное поле, а значения - одно поле. –