Skip to main content
 首页 » 编程设计

python之将两个多维列表合并为一个列表

2025年05月04日14dflying

我有两个要合并的列表:

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()]