我想编写一个函数,一次可对多个字典值进行操作。
具体来说,我想获取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()以便不更改原始文件。
答案 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