Как преобразовать str в int python

#python #python-3.x #re

Вопрос:

У меня есть функция 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))
 

Я пытался

  for i in data:
        b = re.findall(r',S _S ,[0-9] ', i)
        a  = [[ int(b) for b in i.split(',') if b] for i in b]
 return max(a, key=lambda x: int(x[1]))
 

Но ошибка вывода ValueError: invalid literal for int() with base 10: 'eu_kyiv'

Важно использовать модуль re

Ответ №1:

 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]

    maximum = max(a, key=lambda x: int(x[1]))
    return [maximum[0],int(maximum[1])]
 

Ответ №2:

Я думаю, что вы делаете инт(х[1]), Когда вы должны делать инт(х[2]), потому что первый элемент находится в положении 0
и x[0] является 3024
х[1] является eu_kyiv
х[2] является 24834
поэтому постарайтесь
вернуть максимум(а, ключ=лямбда-х: int(х[2]))

Ответ №3:

Это должно быть довольно просто. Не уверен, что это то, чего ты не понимаешь. Это ваша max функция. Вы действительно говорите ему сравнивать, используя второй индекс, как int и что это будет, но вывод будет представлять собой точные значения, которые он сравнивал, используя определенный ключ. Поэтому вы просто получаете вывод, а затем вручную измените его на int.

 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]
    res = max(a, key=lambda x: int(x[1]))
    return res[0], int(res[1])
 

Комментарии:

1. Это не работает TypeError: int() argument must be a string, a bytes-like object or a number, not 'list '

2. @ИльяГринишин edited the answer. Я забыл вернуть разрешение и вместо этого вернул. XD

Ответ №4:

Я предлагаю использовать csv модуль, чтобы получить poppulation значение:

 >>> 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"]
>>>
>>> import csv
>>> max(int(row['poppulation']) for row in csv.DictReader(data))
24834
 

Если также важно использовать re модуль, это простой способ вставить его туда:

 >>> import re
>>> max(int(re.match(".*", row['poppulation'])[0]) for row in csv.DictReader(data))
24834