编辑:我发现我的问题= X结果是我意外地包含了来自另一个迭代器的值,这导致了操作中的静态值。我的错。
问题:我是删除问题还是留下?
我正在尝试编写一个脚本,该脚本从嵌套字典中读取值,然后执行除法运算并将其作为嵌套字典中的键:值对返回。
所以我从这开始:
main_dict = {nested: {first_number: int,
second_number: int}
nested1: {first_number: int,
second_number: int}
...
}
我想得到的是:
main_dict = {nested: {first_number: int,
second_number: int
wanted_number: float}
nested1: {first_number: int,
second_number: int
wanted_number: float}
...
}
做了什么:
for nested in main_dict:
main_dict[nested]['wanted_number'] = float(main_dict[nested]['first_number'])
/ float(main_dict[nested]['second_number'])
例如,first_number = 11,second_number = 15,我应该
main_dict[nested]['wanted_number'] = 0.733...
但我得到了
main_dict[nested]['wanted_number'] = 1.0
到目前为止,我尝试使用: from_future import division,numpy的true_division,这两者都应该是多余的,因为我使用的是Python 3.4。
输出类型是float(),我试图在除法之前和除法之后将值显式转换为float()。我还试过一个术语是float()而另一个是int()。我也尝试过使用带有getcontext()的decimal模块.prep = 6。
这是执行函数的特征,还是值指向bin的方式?
答案 0 :(得分:1)
应该没有这样的四舍五入。
通过在for
循环中打印出来,确认您划分的数字确实不同。
你是对的,在Python3中你不需要任何魔法来获得浮点除法。甚至不需要float()
Python 3.3.2+ (default, Feb 28 2014, 00:52:16)
[GCC 4.8.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 11/15
0.7333333333333333
您尚未显示dict的构造方式。确保您使用不同的子词典,而不是引用相同的子词典或其他内容。
在REPL中运行它以向我们展示您所看到的内容。
>>> main_dict = {'nested': {'first_number': 11,
... 'second_number': 15},
... 'nested1': {'first_number': 3,
... 'second_number': 4}
... }
>>>
>>> for nested in main_dict:
... main_dict[nested]['wanted_number'] = main_dict[nested]['first_number'] / main_dict[nested]['second_number']
...
>>> main_dict
{'nested1': {'wanted_number': 0.75, 'second_number': 4, 'first_number': 3}, 'nested': {'wanted_number': 0.7333333333333333, 'second_number': 15, 'first_number': 11}}