![](/img/trans.png)
[英]How do i perform operations between elements of a lists in Python using indecies?
[英]How can I perform arithmatic operations between elements of two lists with no common key in Python 2.7
我有两个具有不同属性的列表。 但是,最终结果是根据两个属性的组合计算得出的,这些属性从每个列表中选择一个。 它们之间没有通用密钥。 以下是我的代码-
import math
import json
# First list
with open("acc.json") as data_file:
list1 = [json.loads(line) for line in data_file]
for acce in list1:
Xaxis = float(format(float(acce['dataX']),'.4f'))
Yaxis = float(format(float(acce['dataY']),'.4f'))
Zaxis = float(format(float(acce['dataZ']),'.4f'))
#Second list
with open("gyro.json") as data_file2:
list2 = [json.loads(line) for line in data_file2]
for gyro in list2:
pitch=float(format(float(gyro['dataX']),'.4f'))
roll=float(format(float(gyro['dataY']),'.4f'))
yaw=float(format(float(gyro['dataZ']),'.4f'))
gX=float(-g * math.cos(pitch)*math.sin(roll))
gY=float(-g * math.sin(pitch))
gZ=float(g * math.cos(pitch) * math.cos(roll))
#Below code is not working
for (k,v),(k2,v2) in zip(my_dict.iteritems(), my_dict2.iteritems()):
linAcceX=float((Xaxis-gX)/g)
linAcceY=float((Yaxis-gY)/g)
linAcceZ=float((Xaxis-gZ)/g)
print linAcceX,"--",linAcceY,"--",linAcceZ
我得到的错误是
for (k,v),(k2,v2) in zip(my_dict.iteritems(), my_dict2.iteritems()):
AttributeError: 'list' object has no attribute 'iteritems'
我目前正在使用python 2.7。 我已经写了尽可能多的内联评论。 两个列表代码都可以正常运行。
输入文件'acc.json'
{"dataX":"- 0.9621435403823853","dataY":"2.9307477474212646","dataZ":"8.861872673034668"}
{"dataX":"-1.1992958784103394","dataY":"3.096036195755005","dataZ":"8.895410537719727"}
{"dataX":"-2.95518159866333","dataY":"2.7582736015319824","dataZ":"6.964654445648193"}
'gyro.json'
{"dataX":"0.07588004320859909","dataY":"0.06340815126895905","dataZ":"-0.08991656452417374"}
{"dataX":"-0.010938923805952072","dataY":"0.12412817031145096","dataZ":"0.036317165940999985"}
{"dataX":"-0.054614730179309845","dataY":"0.015471287071704865","dataZ":"0.00968557596206665"}
这些是实际数据,因此输出看起来很实际。
您所说的my_dict
不是字典,因此它没有iteritems
方法。 这是一个列表,您可以使用以下列表正确地进行迭代:
for acce in my_dict:
...
要一起迭代两个列表,请使用
for acce, gyro in zip(my_dict, my_dict2):
# access items like you do before
# acce['dataX']
# within this loop you might be able to do
for (k,v),(k2,v2) in zip(acce.iteritems(), gyro.iteritems()):
...
为了对此进行全面测试,我必须重建您的列表或JSON结构。 您可能需要提供一个包含实际数据以及预期结果的最小示例(您可能会跳过所有math
细节,因为重点是遍历数据结构。
使用您的样本-将n复制粘贴为字典列表。 (PY3)
In [1]: list1=[{"dataX":"- 0.9621435403823853","dataY":"2.9307477474212646","dataZ":"
...: 8.861872673034668"},
...: {"dataX":"-1.1992958784103394","dataY":"3.096036195755005","dataZ":"8.8954105
...: 37719727"},
...: {"dataX":"-2.95518159866333","dataY":"2.7582736015319824","dataZ":"6.96465444
...: 5648193"}]
In [2]: list2=[{"dataX":"0.07588004320859909","dataY":"0.06340815126895905","dataZ":"
...: -0.08991656452417374"},
...: {"dataX":"-0.010938923805952072","dataY":"0.12412817031145096","dataZ":"0.036
...: 317165940999985"}.
...: {"dataX":"-0.054614730179309845","dataY":"0.015471287071704865","dataZ":"0.00
...: 968557596206665"}]
File "<ipython-input-2-91a4ce8928da>", line 3
{"dataX":"-0.054614730179309845","dataY":"0.015471287071704865","dataZ":"0.00968557596206665"}]
^
SyntaxError: invalid syntax
In [3]: list2=[{"dataX":"0.07588004320859909","dataY":"0.06340815126895905","dataZ":"
...: -0.08991656452417374"},
...: {"dataX":"-0.010938923805952072","dataY":"0.12412817031145096","dataZ":"0.036
...: 317165940999985"},
...: {"dataX":"-0.054614730179309845","dataY":"0.015471287071704865","dataZ":"0.00
...: 968557596206665"}]
In [4]: for x, y in zip(list1, list2):
...: for (k,v),(k2,v2) in zip(x.items(), y.items()):
...: print(k,k2,v,v2)
...:
dataX dataX - 0.9621435403823853 0.07588004320859909
dataY dataY 2.9307477474212646 0.06340815126895905
dataZ dataZ 8.861872673034668 -0.08991656452417374
dataX dataX -1.1992958784103394 -0.010938923805952072
dataY dataY 3.096036195755005 0.12412817031145096
dataZ dataZ 8.895410537719727 0.036317165940999985
dataX dataX -2.95518159866333 -0.054614730179309845
dataY dataY 2.7582736015319824 0.015471287071704865
dataZ dataZ 6.964654445648193 0.00968557596206665
我正在使用py3,因此请使用item()
而不是iteritems()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.