Вы, вероятно, должны использовать панды для этого. Что-то вроде:
my_table = """
[the code from your question]
"""
import pandas as pd
pad_table = pd.read_html(my_table)
pad_table
Это должно помочь вам в этом.
Забудьте фильтровать locals()
! Словарю, который Вы даете строке форматирования, позволяют содержать неиспользованные ключи:
>>> name = 'foo'
>>> zip = 123
>>> unused = 'whoops!'
>>> locals()
{'name': 'foo', 'zip': 123, ... 'unused': 'whoops!', ...}
>>> '%(name)s %(zip)i' % locals()
'foo 123'
С новым функция струны фа в Python 3.6, с помощью locals()
больше не необходима:
>>> name = 'foo'
>>> zip = 123
>>> unused = 'whoops!'
>>> f'{zip: >5} {name.upper()}'
' 123 FOO'
Ваш исходный список [foo, bar, baz]
не содержит переменную имена , это просто содержит элементы, которые относятся к тому же значения как переменные, которые Вы перечислили. Это вызвано тем, что у Вас может быть два различных имени переменной, которые относятся к тому же значению.
Так, список отдельно не содержит информацию о том, что другие имена отсылают к объектам. Первый элемент в Вашем массиве имеет имя foo
, но это также имеет имя a[0]
(предположение, что Ваш массив называют a
). После выполнения следующего кода, quux
также относится к тому же объекту:
quux = a[0]
Обновление: Вы правы, что можно использовать eval()
для этого, но его использованию обычно препятствуют. Python обеспечивает, специальный участник назвал __dict__
, который содержит таблицу символов для текущего модуля. Таким образом, Вы можете:
import __main__
d = dict((x, __main__.__dict__[x]) for x in list_of_variable_names)
Необходимость к import __main__
, когда Ваш код находится в основном модуле без имени, является причудой Python.
Можно использовать список или понимания генератора для создания списка ключа, кортежи значения, используемые для прямого инстанцирования dict. Лучший способ ниже:
dict((name, eval(name)) for name in list_of_variable_names)
, Кроме того, если Вы знаете, например, что переменные существуют в локальной таблице символов, которую можно сохранить сами от опасной оценки путем взгляда переменной непосредственно от местных жителей:
dict((name, locals()[name]) for name in list_of_variable_names)
После Вашего заключительного обновления, я думаю, что ответ ниже действительно, что Вы хотите. Если Вы просто используете это для строкового расширения со строками, что Вы управляете, просто передаете местных жителей () непосредственно к строковому расширению, и оно избирательно подойдет к выбору требуемых значений
, Если, однако, эти строки могли бы когда-либо прибывать из внешнего источника (например, файлы перевода), чем это - хорошая идея отфильтровать местных жителей ()
Не эффективный, но не вызов eval
:
dict((k,v) for (k,v) in globals().iteritems() if k in list_of_variable_names)
или
dict((k,v) for (k,v) in vars().iteritems() if k in list_of_variable_names)
в зависимости от того, что Вы хотите.