使用函数在Python中修改字典
我有一个字典(代码中的'wakeup'),它的值是一些列表。
我想用一个函数来改变每个列表的第二个元素,就像下面这样:
def auto(t):
wakeup('zone1')[1] = wakeup('zone1')[0] - t
wakeup = {'zone1': [15, auto(1)],
'zone2': [15, auto(1)]}
print wakeup
这样做是行不通的,因为auto()在'wakeup'定义之前就引用了它。
如果我试着把这个函数放在'wakeup'定义之后,还是会出错,因为这时候'wakeup'字典又在引用auto(),而auto()还没有被定义。
我希望在列表中保持这样的语法:[15, auto(1)]
你能帮我吗?
3 个回答
1
auto
这个词其实和字典没有什么关系,你可以这样理解它。
def auto(n, t):
return n - t
wakeup = {'zone1': [15, auto(15, 1)], 'zone2': [15, auto(15, 1)]}
不过,如果你的代码看起来像这样,那其实你根本不需要一个函数。
1
你的代码根本就不合法。
在函数里修改字典的最好方法是把它作为参数传进去。
def auto(d, t):
for l in d.values():
l[1] = l[0] - t
wakeup = {'zone1': [15, 0],
'zone2': [15, 0]}
auto(wakeup, 1)
如果你还是想修改字典,但又不想把它作为参数传递,可以使用全局变量的语法。
def auto(t):
global wakeup
for l in wakeup.values():
l[1] = l[0] - t
wakeup = {'zone1': [15, 0],
'zone2': [15, 0]}
auto(1)
在这个特定的情况下,因为你并没有重新赋值给wakeup,所以其实不一定需要用到全局变量,但最好还是养成使用它的习惯。同时,尽量少用全局变量也是个好主意。
这段代码是合法的:
def auto(t):
for l in wakeup.values():
l[1] = l[0] - t
wakeup = {'zone1': [15, 0],
'zone2': [15, 0]}
auto(1)
2
你在声明变量 wakeup
时调用了函数 auto
,而且你还想在函数 auto
里面使用变量 wakeup
。
所以,实际上你是在变量 wakeup
还没有被创建之前就想使用它。
首先,你需要决定变量 wakeup
的初始值是什么:
wakeup = {'zone1': [15, zone1_def_val],
'zone2': [15, zone2_def_val]}
然后,你可以在需要的时候调用函数 auto
:
def auto(t):
wakeup['zone1'][1] = wakeup['zone1'][0] - t
auto(2)
auto(3)
auto(5)
...
print wakeup
请注意,当你想要访问字典中的某个元素时,要用 []
而不是 ()
:
wakeup['zone1'] # good
wakeup('zone1') # bad