python 两个list相同部分合并,不同部分列出,生成新的list

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 两个list相同部分合并,不同部分列出,生成新的list相关的知识,希望对你有一定的参考价值。

我有很多行数据,已读取为list
['G60', '京沪高速', '北京', '阴天', '6-12', '偏北风', '一到二级']
['G60', '京沪高速', '天津', '中到大雨', '7-12', '偏北风', '一到二级']
['G60', '京沪高速', '南京', '中到大雨', '7-12', '偏北风', '一到二级']
['G60', '京沪高速', '上海', '中到大雨', '7-12', '偏北风', '一到二级']
...
现在需要判断,第四列中的数据,只要相同,就进行合并。合并后的结果为:
['G60', '京沪高速', '天津-上海', '中到大雨', '7-12', '偏北风', '一到二级']

刚刚学习python不久,还不太熟悉使用。请大神提供指点。谢谢

all_list = [['G60', '京沪高速', '北京', '阴天', '6-12', '偏北风', '一到二级'] ['G60', '京沪高速', '天津', '中到大雨', '7-12', '偏北风', '一到二级'] ['G60', '京沪高速', '南京', '中到大雨', '7-12', '偏北风', '一到二级']]
result = dict()
for item in all_list:
if result.get(item[3], None) is None:
result[item[3]] = item[2]

else:

result[item[3]] += "-" + item[2]

print(result)
参考技术A 使用jdk8新功能流stream,快速合并、筛选、去重,代码如下:
第一个类
public class Data1
private int id;
private String name;
private int amount;
public Data1(int id,String name,int amount)
this.id=id;
this.name=name;
this.amount=amount;


第二个类
public class Data2
private int id;
private String name;
private String type;
public Data2(int id,String name,String type)
this.id=id;
this.name=name;
this.type=type;


结果类
public class OutputData
private int id;
private String name;
private List<String> types;
private int amount;
public OutputData(int id, String name, List<String> types, int amount)
this.id=id;
this.name=name;
this.amount=amount;
this.types=types;


关键代码
public class Test
public static void main(String args[])
List<Data2> listOfData2 = new ArrayList<Data2>();

listOfData2.add(new Data2(10501, "JOE" , "Type1"));
listOfData2.add(new Data2(10603, "SAL" , "Type5"));
listOfData2.add(new Data2(40514, "PETER", "Type4"));
listOfData2.add(new Data2(59562, "JIM" , "Type2"));
listOfData2.add(new Data2(29415, "BOB" , "Type1"));
listOfData2.add(new Data2(10501, "JOE" , "Type9"));
listOfData2.add(new Data2(10501, "JOE" , "Type7"));
listOfData2.add(new Data2(62556, "JEFF" , "Type1"));
listOfData2.add(new Data2(10599, "TOM" , "Type4"));
listOfData2.add(new Data2(29415, "BOB" , "Type3"));

List<Data1> listOfData1 = new ArrayList<Data1>();

listOfData1.add(new Data1(10501, "JOE" ,3000000));
listOfData1.add(new Data1(10603, "SAL" ,6225000));
listOfData1.add(new Data1(40514, "PETER" ,2005000));
listOfData1.add(new Data1(59562, "JIM" ,3000000));
listOfData1.add(new Data1(29415, "BOB" ,3000000));
listOfData1.add(new Data1(29416, "LUCY" ,3000000));
//此次是关键
List<OutputData> result2 = listOfData1.stream()
.map(x ->
//提取某个字段,生成list,合并进新结果list
List<String> types = listOfData2.stream().filter(y -> y.getId() == x.getId()).map(Data2::getType).collect(Collectors.toList());
return new OutputData(x.getId(), x.getName(), types, x.getAmount());
)
.collect(Collectors.toList());
System.out.println(result2);

以上是关于python 两个list相同部分合并,不同部分列出,生成新的list的主要内容,如果未能解决你的问题,请参考以下文章

easyui datagrid 表格动态隐藏部分列的展示

python两个长度相等的list元素合并?

从两个List集合里找到相同部分和不同部分

sql表插入行问题,部分列插入NULL值

java基础 合并两个类型相同的list

【R】行或列数目不同的两个数据框如何用rbind/cbind合并?