Python:字典列表之间的减法
我有 2 个包含字典的列表,如下:
listone = [{'unit1': {'test1': 10}},
{'unit1': {'test2': 45'},
{'unit2': {'test1': 78'},
{'unit2': {'test2': 2'}}]
listtwo = [{'unit1': {'test1': 56}},
{'unit1': {'test2': 34'},
{'unit2': {'test1': 23'},
{'unit2': {'test2': 5'}}]
我也有所有单位名称和单位名称。单独列表中的测试名称:
units = ['unit1', 'unit2']
testnames = ['test1,'test2']
如何找到每个测试值的增量,即 (test2
- test1
) 的 val,以便我最终可以将数据排列为如下:
unit1, test1, delta
unit1, test2, delta
unit2, test1, delta
unit2, test2, delta
到目前为止,我有这些:
def delta(array1, array2):
temp = []
temp2 = []
tmp = []
tmp2 = []
delta = []
for unit in units:
for mkey in array1:
for skey in mkey:
if skey == unit:
temp.append(mkey[skey])
floater(temp) #floats all the values
for i in testnames:
for u in temp:
tmp.append(u[i])
tmp = filter(None, tmp2)
for mkey in array2:
for skey in mkey:
if skey == unit:
temp.append(mkey[skey])
floater(temp2)
for i in testnames:
for u in temp2:
tmp2.append(u[i])
tmp2 = filter(None, tmp2)
delta = [tmp2 - tmp for tmp2, tmp in zip(tmp2, tmp)]
print delta
delta(listone,listtwo)
不幸的是,代码给出了Keyerror
。 :( 请帮忙。谢谢。
I have 2 list containing dictionaries as follows:
listone = [{'unit1': {'test1': 10}},
{'unit1': {'test2': 45'},
{'unit2': {'test1': 78'},
{'unit2': {'test2': 2'}}]
listtwo = [{'unit1': {'test1': 56}},
{'unit1': {'test2': 34'},
{'unit2': {'test1': 23'},
{'unit2': {'test2': 5'}}]
I also do have all the unit names & test-names in separate lists:
units = ['unit1', 'unit2']
testnames = ['test1,'test2']
How could I find the delta for each test value, i.e. val of (test2
- test1
), so that I could finally arrange the data as follows:
unit1, test1, delta
unit1, test2, delta
unit2, test1, delta
unit2, test2, delta
So far, I have these:
def delta(array1, array2):
temp = []
temp2 = []
tmp = []
tmp2 = []
delta = []
for unit in units:
for mkey in array1:
for skey in mkey:
if skey == unit:
temp.append(mkey[skey])
floater(temp) #floats all the values
for i in testnames:
for u in temp:
tmp.append(u[i])
tmp = filter(None, tmp2)
for mkey in array2:
for skey in mkey:
if skey == unit:
temp.append(mkey[skey])
floater(temp2)
for i in testnames:
for u in temp2:
tmp2.append(u[i])
tmp2 = filter(None, tmp2)
delta = [tmp2 - tmp for tmp2, tmp in zip(tmp2, tmp)]
print delta
delta(listone,listtwo)
Unfortunately, the code gives Keyerror
. :(
Help, please. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
也许将您的数据转换为不同的、更方便的数据结构。
例如,使用像这样的单个字典而不是
listone
会更容易:所以给定,
这里我们转换
listone
和listtwo
到字典列表:现在找到
deltas
很容易:产量
Perhaps convert your data to a different, more convenient data structure.
For example, instead of
listone
, it would be easier to work with a single dict like this:So given,
Here we convert
listone
andlisttwo
to a list of dicts:Now finding the
deltas
is easy:yields
类似但更封装:
编辑:查找字段平均值:
Similar but a bit more encapsulated:
Edit: to find field-averages:
我认为使用词典的词典更容易完成。在这里,我分步骤定义它们,因为我假设您正在从某些测试过程中收集结果,但您也可以在一行中完成。
这产生
I think it is easier done with dictionaries of dictionaries. Here, I define them in steps, since I assume you're gathering the results from some testing process, but you can also do it in one line.
This yields
这将解决您当前的问题:
但是,正如前面的海报所建议的那样,您确实应该考虑不同的数据结构。我建议使用类似带有(单元,测试)键和列表值的单个字典。
This will solve your current problem:
However, as the previous poster recommended, you should really consider a different data structure. I would suggest something like a single dictionary with a (unit, test) key and a list value.