我使用Python 3.6.4
我有一门课,我在其中计算一堆属性。我必须将所有这些取整到不同的小数位,其中一些可以为无。
示例:
假设我具有以下属性,值,小数位
a, 1.155 , 0
b, 1.123 , 2
c, None , 1
...
因此我需要的是
a= 1.2
b= 1.23
c= None
...
临时解决方案
我去寻找每个属性,然后四舍五入
if attribute is not None:
attribute = round(attribute, decimal_places)
但是我的属性太多了。
我尝试过的事情:
我列出了一个元组列表(属性,小数位数)。像这样:
attributes_decimal_places = [
(self.a, 0),
(self.b, 2),
(self.c, 1),
]
在此列表中,我可以运行以下命令,该命令为我提供了正确的四舍五入值,但我无法将此结果值保存在属性中
solution = [round(x[0], x[1]) if isinstance(x[0], float) else x[0] for x in attributes_decimal_points]
问题:
如何将舍入后的值放入属性而不是列表中?
解决方案:
感谢所有回答的人。一个对我来说很好的解决方案:
attributes_decimal_points = [
(self.a, "a", 1),
(self.b, "b", 2),
(self.c, "c", 3)
]
for attribute in attributes_decimal_points:
if attribute[0] is None:
continue
else:
setattr(self, attribute[1], round(attribute[0], attribute[2]))
答案 0 :(得分:0)
您可以使用字典:
solution = {}
for x in attributes_decimal_points:
if isinstance(x[0], float):
solution.update({x[0]: round(x[0], x[1])})
else:
solution.update({x[0]: x[1]})
这样,您可以通过属性名称获取属性。