for循环中的本地和全局范围

时间:2017-01-02 05:28:40

标签: python

我正在尝试使用具有相同名称的值创建字典。对于例如mylist键的值应为['a','b'] 以下代码无法使用正确的名称替换列表。

mylist=['a', 'b']
yourlist=['x', 'y']
pw=dict()
for mysheet in ('mylist', 'yourlist'):
    pw[mysheet] = mysheet

pw
{'mylist': 'mylist', 'yourlist': 'yourlist'}

# expected result
#{'mylist': ['a', 'b'] , 'yourlist':  ['x', 'y']}

for循环是否具有局部和全局范围,就像函数一样?

3 个答案:

答案 0 :(得分:2)

不确定你的用例。一般来说,这不是一个非常好的编码模式

但是,实现这一目标的一种方法是使用locals() context

基本上,你会在循环中做pw[mysheet] = locals()[mysheet]

样本

>>> mylist=['a', 'b']
>>> yourlist=['x', 'y']
>>> pw = {}
>>> for mysheet in ('mylist', 'yourlist'):
...     pw[mysheet] = locals()[mysheet] 
... 
>>> pw
{'yourlist': ['x', 'y'], 'mylist': ['a', 'b']}
>>> 

答案 1 :(得分:2)

这是你应该如何实现的。

for name, mysheet in ('mylist', mylist), ('yourlist',yourlist):
    pw[name] = mysheet

另外,你传递的是字符串元组,而不是实际的变量。

正如karthikr所述,您也可以使用locals()。但请注意,已解析的名称会检查当前名称空间。

答案 2 :(得分:1)

忽略本地全局问题并专注于您想要的输出,如果您不介意重构输入数据(变量赋值)模式,可以执行以下操作:

mylist=['mylist',['a', 'b']]
yourlist=['yourlist',['x', 'y']]

pw=dict()

for item in (mylist, yourlist):
    pw[item[0]] = item[1]

print(pw)

这样,将您想要的密钥设置为输入列表项的index 0,将所需的值列表设置为index 1,将密钥:对添加到{{1}是一项简单的任务} pw