#python #string #list #for-loop #substring
Вопрос:
Я использую библиотеку подделок.
from faker import Faker
fake = Faker()
У меня есть список вложенных списков (по 2 элемента в каждом); имя столбца для представления фрейма данных и сам вызов функции.
Список всех имен функций, за исключением имен функций, которые начинаются с»_».:
my_list = [[m, 'fake.' m '()'] for m in dir(fake) if m[0] != '_']
my_list
>>> [['add_provider', 'fake.add_provider()'],
['address', 'fake.address()'], ...
Теперь я хочу добавить еще одно условие к тому же для цикла, исключая имена функций.
Попытка Решения:
exclude = ['add_provider']
fake_cols = [[m, 'fake.' m '()'] for m in dir(fake) if function_name in exclude or function_name[:1] == "_"]
fake_cols
Вывод пуст:
[]
Мы будем признательны за любые более лаконичные решения.
Комментарии:
1. Просто избавиться от любого? Это работает?
2. Он по-прежнему включает имя метода «add_provider» в моем списке «исключить». Последний код и вывод выше
3. Есть также что-то странное в
[m, 'fake.' m '()'
m-это список, не так ли?4. m — это имя метода
5. итак, мой список точно построен как dir(подделка) ?
Ответ №1:
Возможно, небольшой капитальный ремонт сделал бы это, посмотрите на следующее, если это делает то, к чему вы стремитесь:
import faker
faker = faker.Faker()
exclude = ["add_provider", "address"]
faker_functions ={}
for function_name in dir(faker):
if function_name in exclude or function_name[:1] == "_":
continue
try:
faker_functions[function_name] = getattr(faker, function_name)
except:
continue
def get_list_of_fake_functions():
return list(faker_funcktions.keys())
def get_fake(fake_function):
return faker_functions[fake_function]()
my_list = [[key, "faker." key "()"] for key in faker_functions.keys()]
my_list
Ошибка, как и ожидалось, поскольку исключена:
get_fake("zipcode_plus4")
KeyError: 'zipcode_plus4'
или результат, если нет
get_fake("zipcode_plus4")
Out[38]: '71875-8723'
мой список
my_list[:10]
Out[57]:
[['administrative_unit', 'faker.administrative_unit()'],
['am_pm', 'faker.am_pm()'], ...
Комментарии:
1.Это дает мне пустоту
dict
{}
. Я не думаюtry-catch
, что это необходимо. Я думаю, что моя проблема в моихfor loop
«сif condition
«. Я позаботился о том, чтобы мойFaker
экземпляр был назван так же, как и ваш.2. Это не может привести к пустому словарю, я получаю полный список всех функций с приведенным выше кодом
3. Можете ли вы выполнить только мою вырезку и посмотреть, сможете ли вы выполнить
get_fake("zipcode_plus4")
?4. Сейчас получаю результат. Однако это слишком далеко от того, что мне нужно. Мой макет, как описано в посте, — это то, что мне нужно. Я предполагаю, что это как-то связано с моим состоянием «если».
5. Я добавил
my_list
переменную, это то, что вам нужно?