繁体   English   中英

如何在Python 2.7中没有公共键的情况下在两个列表的元素之间执行算术运算

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM