如何遍历字典并根据列表中的值计算值?

时间:2021-06-09 16:47:14

标签: python

有 8 个电机,我正在监控它们的速度。我有一个字典,我正在迭代它,然后我正在计算速度与各个检索速度的差异。

  • 然后我必须比较变化是否小于每个电机的最大值(在每个电机的速度列表中都有)。
  • 目前正在发生的是它只计算最后一个速度的差异
  • 检索到的速度字典看起来像 {1: 8490, 2: 7920, 3: 8460, 4: 7890, 5: 8460, 6: 7950, 7: 8430, 8: 6720}
speeds = {1: 8800, 2: 8800, 3: 8800, 4: 8800, 5: 8800, 6: 8800, 7: 8800, 8: 7300}
for index , speed in speeds.items():
    print("Please print these for me to understand", speed, retrieved_speeds_dict[index])
    absolute_change = abs(speed - retrieved_speeds_dict[index] )

rpms = [500, 600, 500, 700, 800, 100, 200, 500]
for each_rpm in rpms:
    if absolute_change > each_rpm:
        err_msg = err_msg + f"Out of range by {absolute_change}"
        print(err_msg)
    else:
        self.log.info(f"Speed is correct with {absolute_change}")

有人可以帮助修复循环,以便它计算差异并将其与每个转速值进行比较。

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

retrieved_speeds = { 1: 8490, 2: 7920, 3: 8460, 4: 7890, 5: 8460, 6: 7950, 7: 8430, 8: 6720 }
speeds = {1: 8800, 2: 8800, 3: 8800, 4: 8800, 5: 8800, 6: 8800, 7: 8800, 8: 7300}
rpms = [500, 600, 500, 700, 800, 100, 200, 500]

for  desired,actual,tolerance in zip( speeds.items(), retrieved_speeds.values(), rpms):
    index, desired = desired
    variance = abs(actual-desired)
    if variance > tolerance:
        delta = abs(variance-tolerance)
        err_msg = f"{index} Out of range by {delta}"
        print(err_msg)
    else:
        print(f"{index} Speed is correct within {variance}")

输出:

1 Speed is correct within 310
2 Out of range by 280
3 Speed is correct within 340
4 Out of range by 210
5 Speed is correct within 340
6 Out of range by 750
7 Out of range by 170
8 Out of range by 80

答案 1 :(得分:0)

retrieved_speeds_dict = {1: 8490, 2: 7920, 3: 8460, 4: 7890, 5: 8460, 6: 7950, 
7: 8430, 8: 6720}
speeds = {1: 8800, 2: 8800, 3: 8800, 4: 8800, 5: 8800, 6: 8800, 7: 8800, 8: 
7300}
for a, each_rpm in zip(speeds.items(), rpms):
    index, speed = a
    print("Please print these for me to understand", speed, 
    retrieved_speeds_dict[index])
    absolute_change = abs(speed - retrieved_speeds_dict[index] )
    if absolute_change > each_rpm:
        err_msg = f"Out of range by {absolute_change}"
        print(err_msg)
    else:
        print(f"Speed is correct with {absolute_change}") 

使用zip函数,可以同时遍历字典和列表