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)
温馨提示:内容为网友见解,仅供参考
第1个回答  2021-05-22
使用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);
}
}
相似回答