преобразование списка типа [("['str']", int), ("['str']", int)] в [('str', int), ('str', int)] - PullRequest
2 голосов
/ 22 февраля 2020

У меня есть список типа

[("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]

и я хочу преобразовать его в

[('106.52.116.101', 1), ('45.136.108.85', 1)]

Ответы [ 4 ]

2 голосов
/ 22 февраля 2020

Существует несколько способов решения этой проблемы, например, вы можете сделать это:

lst = [("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]
new = [(l[0][2:-2], l[1]) for l in lst]
print(new)

Вывод:

[('106.52.116.101', 1), ('45.136.108.85', 1)]
0 голосов
/ 22 февраля 2020

вы можете использовать ast.literal_eval:

from ast import literal_eval

l = [("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]
l = [(literal_eval(f)[0], s) for f, s in l]
l

выход:

[('106.52.116.101', 1), ('45.136.108.85', 1)]

0 голосов
/ 22 февраля 2020

Вы можете использовать split () строки, как показано ниже:

lst = [("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]
print(lst)
new_lst = [(first.split('\'')[1], sec)for first, sec in lst]
print(new_lst)

output

[("['106.52.116.101']", 1), ("['45.136.108.85']", 1)]                                                                   
[('106.52.116.101', 1), ('45.136.108.85', 1)] 
0 голосов
/ 22 февраля 2020

Mateen Ulhaq уже представил очень короткое и хорошее решение.

Но если в массиве не всегда есть один элемент, вы можете использовать это:

[(eval(s)[0], n) for s, n in list]

Поскольку eval() интерпретирует python код, строки должны быть синтаксически правильными. Также обратите внимание , если эти строки исходят от пользователя с точки зрения безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...