Как преобразовать переменную типа str в кортеже в int?
У меня есть функция max_population которая должна выводить ('eu_kyiv', 24834). Но выводит ('eu_kyiv', '24834')
Как мне сделать что бы ('24834') выводилось как int
Вот мой код:
import re
def max_population(data):
a = []
for i in data:
b = re.findall(r',\S+_\S+,[0-9]+', i)
a += [[ b for b in i.split(',') if b] for i in b]
return max(a, key=lambda x: int(x[1]))
data = ["id,name,poppulation,is_capital",
"3024,eu_kyiv,24834,y",
"3025,eu_volynia,20231,n",
"3026,eu_galych,23745,n",
"4892,me_medina,18038,n",
"4401,af_cairo,18946,y",
"4700,me_tabriz,13421,n",
"4899,me_bagdad,22723,y",
"6600,af_zulu,09720,n"]
print(max_population(data))
Ответы (3 шт):
Автор решения: Pain Worsnop
→ Ссылка
Не очень эффективное решение. Возможно, кто то предложит лучше.
def max_population(data):
data.pop(0) # Get rid of unused info
populations = []
for city_info in data:
info = city_info.split(",")
populations.append(int(info[2]))
row = data[populations.index(max(populations))]
spl = row.split(",")
return spl[1], int(spl[2])
Автор решения: GrAnd
→ Ссылка
Преобразовывайте в int только то, что число:
a += [[ int(b) if b.isdigit() else b for b in i.split(',') if b] for i in b]
Или вот вам другой вариант функции:
def max_population(data):
res = max(data[1:], key=lambda x: int(x.split(',')[2])).split(',')
return [res[1], int(res[2])]
Автор решения: CrazyElf
→ Ссылка
Ещё можно воспользоваться библиотекой Pandas, она сама сообразит, что это числа:
import pandas as pd
from io import StringIO
data = ["id,name,poppulation,is_capital",
"3024,eu_kyiv,24834,y",
"3025,eu_volynia,20231,n",
"3026,eu_galych,23745,n",
"4892,me_medina,18038,n",
"4401,af_cairo,18946,y",
"4700,me_tabriz,13421,n",
"4899,me_bagdad,22723,y",
"6600,af_zulu,09720,n"]
df = pd.read_csv(StringIO('\n'.join(data)))
print(tuple(df.sort_values('poppulation', ascending=False).loc[0, ['name','poppulation']]))
Вывод:
('eu_kyiv', 24834)
- читаем список и преобразовываем в
pandas.DataFrame - сортируем датафрейм по убыванию по полю
poppulation - берём первую строку в отсортированном и указанные поля в ней
- преобразуем в кортеж