如何从字典中的多个值中按比例缩小整数(相除多次)?

时间:2019-05-24 21:09:37

标签: python

使用此代码将这些类别缩小一百万。第一次运行可以正常运行,但是如果再次运行它又可以除以一百万。我该如何解决?

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}

1 个答案:

答案 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是可缩放的字典,以后可以随时使用。