Учитывая список имен переменной в Python, как делают меня создавание словаря с именами переменной как ключи (к значениям переменных)?

Вы, вероятно, должны использовать панды для этого. Что-то вроде:

my_table = """
  [the code from your question]
 """

import pandas as pd

pad_table = pd.read_html(my_table)
pad_table

Это должно помочь вам в этом.

14
задан Daryl Spitzer 23 October 2008 в 19:28
поделиться

4 ответа

Забудьте фильтровать 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'
16
ответ дан 1 December 2019 в 12:02
поделиться

Ваш исходный список [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.

4
ответ дан 1 December 2019 в 12:02
поделиться

Можно использовать список или понимания генератора для создания списка ключа, кортежи значения, используемые для прямого инстанцирования dict. Лучший способ ниже:

dict((name, eval(name)) for name in list_of_variable_names)

, Кроме того, если Вы знаете, например, что переменные существуют в локальной таблице символов, которую можно сохранить сами от опасной оценки путем взгляда переменной непосредственно от местных жителей:

dict((name, locals()[name]) for name in list_of_variable_names)

После Вашего заключительного обновления, я думаю, что ответ ниже действительно, что Вы хотите. Если Вы просто используете это для строкового расширения со строками, что Вы управляете, просто передаете местных жителей () непосредственно к строковому расширению, и оно избирательно подойдет к выбору требуемых значений

, Если, однако, эти строки могли бы когда-либо прибывать из внешнего источника (например, файлы перевода), чем это - хорошая идея отфильтровать местных жителей ()

4
ответ дан 1 December 2019 в 12:02
поделиться

Не эффективный, но не вызов 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)

в зависимости от того, что Вы хотите.

1
ответ дан 1 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: