我正在尝试使用具有相同名称的值创建字典。对于例如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循环是否具有局部和全局范围,就像函数一样?
答案 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
。