我正在尝试在Python中的两个有序字典之间进行算术运算。但是我面临错误:
TypeError:不支持的操作数类型 -:“collections.OrderedDict”和“int”
以下是Python代码:
from collections import OrderedDict
a = {'a_key':OrderedDict([('Max_Value', [2000]), ('Min_Value', [1000])])}
b = {'b_key':OrderedDict([('Max_Value', [1000]), ('Min_Value', [50])])}
test_dict = {key: str(round(((a[key] - b.get(key, 0))/b.get(key, 0))*100,2))+'%'
for key in a.keys()}
print(test_dict)
预期结果:最终结果应分配给test_dict。在这里,我们想要找到上面提供的每个词典(a,b)的“Max_Value”之间的百分比差异。 'Min_Value' 类似。 'Max_Value' 和 'Min_Value' 都在字典 a、b 的 OrderedDict 中。
预计
test_dict = {'c_key': OrderedDict([('Max_Value', ['100.0%']), ('Min_Value', ['1900.0%'])])}
经过长期的奋斗,我自己通过更多的探索找到了想要的解决方案。下面是代码:
from collections import OrderedDict
currentDict = {'a_key':OrderedDict([('Read_PMax', [21477]), ('Max_Read_P50', [92]), ('Avg_Read_P50', [92]), ('Max_Read_P90', [197]), ('Avg_Read_P90', [197])])}
baseDict = {'b_key':OrderedDict([('Read_PMax', [3325]), ('Max_Read_P50', [70]), ('Avg_Read_P50', [70]), ('Max_Read_P90', [136]), ('Avg_Read_P90', [136])])}
for key in currentDict:
x = currentDict[key]
for key in baseDict:
y = baseDict[key]
z = {}
w = {}
for i, (key, value) in enumerate(x.items()):
z[key]=value
for j,(key, value) in enumerate(y.items()):
w[key]=value
result_dict = {}
result_ordered_dict = OrderedDict(result_dict)
for key in z.keys():
if key in w:
result_ordered_dict[key] = [str(round(((z[key][i] - w[key][i])/w[key][i])*100,2))+'%' for i in range(len(z[key]))]
print(result_ordered_dict)
输出:
OrderedDict([('Read_PMax', ['545.92%']), ('Max_Read_P50', ['31.43%']), ('Avg_Read_P50', ['31.43%']), ('Max_Read_P90', ['44.85%']), ('Avg_Read_P90', ['44.85%'])])