根据 ID 关联 2 个列表

时间:2021-02-26 09:39:16

标签: python

我正在尝试通过 ID 合并 2 个列表中的数据:

list_a = [
(u'65d92438497c', u'compute-0'), 
(u'051df48db621', u'compute-4'), 
(u'd6160db0cbcd', u'compute-3'), 
(u'23fc20b59bd6', u'compute-1'), 
(u'0db2e733520d', u'controller-1'), 
(u'89334dac8a59', u'compute-2'), 
(u'51cf9d50b02e', u'compute-5'), 
(u'f4fe106eaeab', u'controller-2'), 
(u'06cc124662dc', u'controller-0')
]

list_b = [
(u'65d92438497c', u'p06619'), 
(u'051df48db621', u'p06618'), 
(u'd6160db0cbcd', u'p06620'), 
(u'23fc20b59bd6', u'p06622'), 
(u'0db2e733520d', u'p06612'), 
(u'89334dac8a59', u'p06621'), 
(u'51cf9d50b02e', u'p06623'), 
(u'f4fe106eaeab', u'p06611'), 
(u'06cc124662dc', u'p06613')
]

list_ab = [
(u'65d92438497c', u'p06619', u'compute-0'), 
(u'051df48db621', u'p06618', u'compute-4'), 
(u'd6160db0cbcd', u'p06620', u'compute-3'), 
(u'23fc20b59bd6', u'p06622', u'compute-1'), 
(u'0db2e733520d', u'p06612', u'controller-1'), 
(u'89334dac8a59', u'p06621', u'compute-2'), 
(u'51cf9d50b02e', u'p06623', u'compute-5'), 
(u'f4fe106eaeab', u'p06611', u'controller-2'), 
(u'06cc124662dc', u'p06613', u'controller-0')
]

您可以看到 ID 中的第一个字段,在 list_a 和 list_b 之间相同,我需要在此值上进行合并

我不确定result_ab需要什么类型的数据 这样做的目的是从“p06619”中找到“compute-0”,所以也许有比合并更好的方法。

3 个答案:

答案 0 :(得分:0)

您正在使用包含元组的一维列表,它可能不需要。无论如何,要获得您需要的输出:

list_a = [(u'65d92438497c', u'compute-0')]

list_b = [(u'65d92438497c', u'p-06619')]

result_ab = None

if list_a[0][0] == list_b[0][0]:
    result_ab = [tuple(list(list_a[0]) + list(list_b[0][1:]))]

答案 1 :(得分:0)

这是我的解决方案:

merge = []
for i in range(0,len(list_a)):
    if list_a[i][0] == list_b[i][0]:
        merge.append([tuple(list(list_a[i]) + list(list_b[i][1:]))])

答案 2 :(得分:0)

这个想法是创建一个字典,其中键作为列表的第一个元素,值作为列表对象,所有元素都与该键匹配。

接下来,只需遍历字典并创建所需的新列表对象:

 public class Car{
        String carname;
        int carspeed;
    
        public  Car(String carname , int carSpeed){
            this.carname = carname;
            carspeed = carSpeed;
        }
    }