Извлечение значений из списка словарей для расчетов в python? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть список словарей, содержащих информацию о каждом из лондонских районов. Я должен определить среднюю и среднюю численность населения, площадь и плотность населения всех районов. Я чувствую, что, возможно, лучший способ сделать это - просто собрать значения населения и площади в списки, но я не знаю, как.

Вот данные, которые я импортировал, файл называется «район». '

[{'area': 13.93, 'name': 'Barking and Dagenham', 'population': 194352},
 {'area': 33.49, 'name': 'Barnet', 'population': 369088},
 {'area': 23.38, 'name': 'Bexley', 'population': 236687},
 {'area': 16.7, 'name': 'Brent', 'population': 317264},
 {'area': 57.97, 'name': 'Bromley', 'population': 317899},
 {'area': 8.4, 'name': 'Camden', 'population': 229719},
 {'area': 33.41, 'name': 'Croydon', 'population': 372752},
 {'area': 21.44, 'name': 'Ealing', 'population': 342494},
 {'area': 31.74, 'name': 'Enfield', 'population': 320524},
 {'area': 18.28, 'name': 'Greenwich', 'population': 264008},
 {'area': 7.36, 'name': 'Hackney', 'population': 257379},
 {'area': 6.33, 'name': 'Hammersmith and Fulham', 'population': 178685},
 {'area': 11.42, 'name': 'Haringey', 'population': 263386},
 {'area': 19.49, 'name': 'Harrow', 'population': 243372},
 {'area': 43.35, 'name': 'Havering', 'population': 242080},
 {'area': 44.67, 'name': 'Hillingdon', 'population': 286806},
 {'area': 21.61, 'name': 'Hounslow', 'population': 262407},
 {'area': 5.74, 'name': 'Islington', 'population': 215667},
 {'area': 4.68, 'name': 'Kensington and Chelsea', 'population': 155594},
 {'area': 14.38, 'name': 'Kingston upon Thames', 'population': 166793},
 {'area': 10.36, 'name': 'Lambeth', 'population': 314242},
 {'area': 13.57, 'name': 'Lewisham', 'population': 286180},
 {'area': 14.52, 'name': 'Merton', 'population': 203223},
 {'area': 13.98, 'name': 'Newham', 'population': 318227},
 {'area': 21.78, 'name': 'Redbridge', 'population': 288272},
 {'area': 22.17, 'name': 'Richmond upon Thames', 'population': 191365},
 {'area': 11.14, 'name': 'Southwark', 'population': 298464},
 {'area': 16.93, 'name': 'Sutton', 'population': 195914},
 {'area': 7.63, 'name': 'Tower Hamlets', 'population': 272890},
 {'area': 14.99, 'name': 'Waltham Forest', 'population': 265797},
 {'area': 13.23, 'name': 'Wandsworth', 'population': 310516},
 {'area': 8.29, 'name': 'Westminster', 'population': 226841},
 {'area': 1.12, 'name': 'City of London', 'population': 7000}]

До сих пор я пытался сделать a для l oop, но это не очень хорошо, и я продолжаю распечатывать все значения совокупности, но они не могут быть использованы для расчета что-нибудь из-за формата, в котором они печатают:

for item in boroughs:
     name = item['name']
     population = item['population']
     area = item['area']
     print(population)

Результат выглядит следующим образом .

Я новичок, поэтому, пожалуйста, объясните в очень простых терминах):

Ответы [ 3 ]

1 голос
/ 30 апреля 2020

Проще всего использовать pandas фрейм данных:

import pandas as pd
df = pd.DataFrame(boroughs)
df["density"] = df.population / df.area
print(df.describe())   # presents several useful statistics
print(df.area.mean())
print(df.density.median())

В качестве альтернативы использовать модуль statistics стандартной библиотеки:

from statistics import mean, median
print(mean(borough["area"] for borough in boroughs))
print(median(borough["population"] / borough["area"] for borough in boroughs)) # density

или аналогичный от numpy:

from numpy import mean, median
print(median([borough["population"] for borough in boroughs])) 

Есть предыдущие вопросы с дополнительными функциями для расчета среднее и медиана , если вы не хотите использовать эти модули для какая-то причина.

0 голосов
/ 30 апреля 2020

Я думаю, что следующее может работать. Итак, как вы сказали, вы хотите сформировать список групп населения и областей, чтобы вы могли перебирать его, чтобы найти среднее и среднее значение, верно?

areas = []
population = []

for x in boroughs:
    areas.append(x['area'])
    population.append(x['population'])

Итак, у вас есть список областей и населения, и вы можно найти медиану и среднее из нее.

РЕДАКТИРОВАТЬ: Теперь для среднего населения, вы можете просто сделать следующее.

mean_of_population = sum(population)/len(population)

И для медианы

n = len(population)
if n%2==0 : #ie if the number of element in the list population are even.
    median  = (population[n//2] + population[n//2 - 1])/2
else:
    median = population[n//2]
0 голосов
/ 30 апреля 2020

Это просто основа c для l oop. Если у вас есть строка типа int, например «123», убедитесь, что она преобразована в int

total_pop = 0
for city in list:
    pop = int(city['population'])
    total_pop += pop
...