我有两个要合并的列表:
list1 = [['desktop', '10022'], ['mobile', '119'], ['tablet', '7']]
list2 = [['desktop', '9964'], ['mobile', '117'], ['tablet', '8']]
我想将它们排列到这个列表中:
new_list = [('desktop', ['10022', '9964']), ('mobile', ['119', '117']), ('tablet', ['7', '8'])]
然后,我还想计算整数之间的百分比差异并将答案插入列表中:
updated_list = [['desktop', '10022', '9964', '0.5821'], ['mobile', '119', '117', '1.7094'], ['tablet', '7', '8', '-12.5']]
这是我的粗略代码:
from collections import OrderedDict
list1 = [['desktop', '10022'], ['mobile', '119'], ['tablet', '7']]
list2 = [['desktop', '9964'], ['mobile', '117'], ['tablet', '8']]
merged = OrderedDict()
for list_ in list1, list2:
for k, v in list_:
try:
merged[k].append(v)
except:
merged[k] = [v]
def diff(x, y):
return ((x/y)-1)*100
updated_list = [[row,x,y,diff(x,y) for x,y in vals.items()] for row,vals in merged.items()]
无法让这个东西工作:(
请您参考如下方法:
假设您的列表已排序且同质,您可以
[[k, int(v1), int(v2), int(v1)/int(v2) - 1] for ((k, v1), (_, v2)) in zip(list1, list2)]
如果列表数据是同类的,但没有排序,只需调用
list1.sort()
list2.sort()
在处理它之前。如果数据不均匀,迭代的简单方法是将列表转换为字典并迭代公共(public)键:
d1, d2 = dict(list1), dict(list2)
[[k, int(d1[k]), int(d2[k]), int(d1[k])/int(d2[k]) -1] for k in d1.keys() & d2.keys()]
