从变量列表创建字典

时间:2012-02-29 07:40:30

标签: python dictionary

我正在寻找一种创建字典的方法,而无需明确地编写密钥 我想创建获取数字变量的函数,并创建字典,其中变量名称是键,它们的值是变量值

而不是编写以下函数:

def foo():
    first_name = "daniel"
    second_name = "daniel"
    id = 1
    return {'first_name':first_name, 'second_name':second_name}

我想通过函数获得相同的结果:

create_dict_from_variables(first_name, second_name)

无论如何都要这样做吗?

7 个答案:

答案 0 :(得分:14)

如果不写至少变量名称就不能这样做,但是可以这样写一个简写:

>>> foo = 1
>>> bar = 2
>>> d = dict(((k, eval(k)) for k in ('foo', 'bar')))
>>> d
{'foo': 1, 'bar': 2}

或作为一种功能:

def createDict(*args):
     return dict(((k, eval(k)) for k in args))

>>> createDict('foo','bar')
{'foo': 1, 'bar': 2}

您也可以使用globals()代替eval()

>>> dict(((k, globals()[k]) for k in ('foo', 'bar')))

答案 1 :(得分:4)

您可以使用locals,但我会建议不要使用它。明确地做。

>>> import this
[...]
Explicit is better than implicit.
[...]

如果您明确地执行此操作,您的代码通常会更好,更可预测,更不容易破解,也更容易理解。

答案 2 :(得分:2)

你不能这样做。

您的功能可以定义为:

def create_dict_from_variables(first_name, second_name):
    return something_from(first_name, second_name)

你可以调用这个函数:

create_dict_from_variables('abcd', 'efgh')

这两个参数'abcd''efgh'不是命名变量。

答案 3 :(得分:1)

不,没有,因为Python函数没有获得有关用于调用函数的变量的信息。另外,想象做这样的事情:

create_dict_from_variables(first_name[:-3] + "moo", last_name[::2])

该函数无法知道用于创建参数的表达式。

答案 4 :(得分:1)

pip install sorcery

from sorcery import dict_of

a = 1
b = 2
c = 3
d = dict_of(a, b, c)
print(d)
# {'a': 1, 'b': 2, 'c': 3}

答案 5 :(得分:0)

原则上,这可以通过将变量名称传递给函数create_dict然后使用模块create_dictinspect函数内到达调用者堆栈帧来实现。

答案 6 :(得分:0)

其实还有一个办法:

from varname import nameof

def foo(first_name,second_name):
    return {nameof(first_name):first_name, nameof(second_name):second_name}

first_name = "daniel"
second_name = "daniel"

print (foo(first_name,second_name))

输出:

{'first_name': 'daniel', 'second_name': 'daniel'}

您可以在下面获得 python-varname 包:

https://github.com/pwwang/python-varname

基本用途:

from varname import nameof

s = 'Hey!'

print (nameof(s))

输出:

s