如何缩小字典中多个值的整数?

时间:2018-11-01 17:02:40

标签: python python-3.x

我想编写一个函数,一次可对多个字典值进行操作。

具体来说,我想获取selected_keys的所有值,将它们除以100万,然后四舍五入到小数点后两位。像这样:

def scale_down_movie(movie):
    selected_keys = movie['budget'], movie['budget_2013$'], movie['domgross'], movie['domgross_2013$'], movie['intgross'], movie['intgross_2013$']
    for value in selected_keys: 
        round(value/1000000, 2)   
    return movie

scale_down_movie(电影[0])当前正在输出:

{'budget': 13000000,
 'domgross': 25682380.0,
 'intgross': 42195766.0,
 'budget_2013$': 13000000,
 'domgross_2013$': 25682380.0,
 'intgross_2013$': 42195766.0
}

所需的输出:

{'budget': 13.00,
 'domgross': 25.68,
 'intgross': 42.19,
 'budget_2013$': 13.00,
 'domgross_2013$': 25.68,
 'intgross_2013$': 42.19
}

谢谢。

更新:

使用此代码:

def scale_down_movie(movie):
    selected_keys = ('domgross_2013$', 'budget', 'budget_2013$', 'domgross', 'domgross_2013$', 'intgross', 'intgross_2013$')
    for key in selected_keys:
        movie[key] = round(movie[key]/1000000, 2)  
    return movie

获得意外结果。

预期输出:

scale_down_movie(parsed_movies [9])

{'binary': 'FAIL',
'budget': 130.0,
'budget_2013$': 130.0,
'clean_test': 'notalk',
'code': '2013FAIL',
'decade code': 1.0,
'domgross': 60.52,
'domgross_2013$': 60.52,
'imdb': 'tt1815862',
'intgross': 244.37,
'intgross_2013$': 244.37,
'period code': 1.0,
'test': 'notalk',
'title': 'After Earth',
'year': 2013}

实际输出:

{'year': 2013,
 'imdb': 'tt1815862',
 'title': 'After Earth',
 '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}

解决方案:

def scale_down_movie(movie):
    scaled_movie = movie.copy()
    selected_keys = ('domgross_2013$', 'budget', 'budget_2013$', 'domgross', 'domgross_2013$', 'intgross', 'intgross_2013$')
    for key in selected_keys: 
        scaled_movie[key] = round(scaled_movie[key]/1000000, 2)   
    return scaled_movie

错误之处: 每次您按下推力跑时,它都会再次除以一百万,因此很快就会接近0。

如何解决: 使用.copy()以便不更改原始文件。

3 个答案:

答案 0 :(得分:1)

怎么样?

def scale_down_movie(movie):
selected_keys = ('domgross_2013$', 'budget', 'budget_2013$', 'domgross', 'domgross_2013$', 'intgross', 'intgross_2013$')
for key in selected_keys: 
    movie[key] = round(movie[key]/1000000, 2)   
return movie

但是,在进行整数除法时,这可能不会返回您期望的值。如果将movie[key]/1000000替换为movie[key]/float(1000000),它将可以正常工作。

答案 1 :(得分:0)

如果您需要一本新词典

def scale_down_movie(movie):
    selected_keys = {'domgross_2013$', 'budget', 
'budget_2013$', movie'domgross', 'domgross_2013$', 
'intgross', 'intgross_2013$'}

    return { k: v/1000000., 2)  for k, v in selected_keys.items if k in selected_keys}

答案 2 :(得分:0)

您返回了错误的值:

def scale_down_movie(movie):
    selected_keys = movie['domgross_2013$'], movie['budget'], 
movie['budget_2013$'], movie['domgross'], movie['domgross_2013$'], 
movie['intgross'], movie['intgross_2013$']
    for value in selected_keys: 
        round(value/1000000, 2)   
    return selected_keys