使用此代码将这些类别缩小一百万。第一次运行可以正常运行,但是如果再次运行它又可以除以一百万。我该如何解决?
def scale_down_movie(movie):
selected_keys = ('budget', 'budget_2013$', 'domgross', 'domgross_2013$', 'intgross', 'intgross_2013$')
for key in selected_keys:
movie[key] = round(movie[key]/1000000,2)
return movie
预期:
{'year': 2013,
'imdb': 'tt1711425',
'title': '21 & Over',
'test': 'notalk',
'clean_test': 'notalk',
'binary': 'FAIL',
'budget': 13.0,
'domgross': 25.68,
'intgross': 42.2,
'code': '2013FAIL',
'budget_2013$': 13.0,
'domgross_2013$': 25.68,
'intgross_2013$': 42.2,
'period code': 1.0,
'decade code': 1.0}
实际(第二次及之后):
{'year': 2013,
'imdb': 'tt1711425',
'title': '21 & Over',
'test': 'notalk',
'clean_test': 'notalk',
'binary': 'FAIL',
'budget': 0.0,
'domgross': 0.0,
'intgross': 0.0,
'code': '2013FAIL',
'budget_2013$': 0.0,
'domgross_2013$': 0.0,
'intgross_2013$': 0.0,
'period code': 1.0,
'decade code': 1.0}
答案 0 :(得分:0)
字典在python中是可变的。
因此,当您将字典传递给函数并对该函数进行修改时,您正在修改原始对象,因为python总是通过引用传递。
您甚至可以从函数中删除return语句。只需调用一次,即可修改原始字典(值四舍五入)。
但是,如果您也希望保留原始词典,请按以下方式修改功能:
def scale_down_movie(movie):
selected_keys = ('budget',)
res = {} #an empty dictionary
for key in movie.keys():
if key in selected_keys:
res[key] = round(movie[key]/1000000,2)
else:
res[key] = movie[key]
return res
如您所见,此函数正在创建一个新字典并返回它,而不是修改原始字典。
如果您这样做:
scaled_movie_dict = scale_down_movie(original_movie_dict)
scaled_movie_dict
是可缩放的字典,以后可以随时使用。