用python如何合并下列两个列表达到第三个列表的效果?

用python如何合并下列前两个列表达到第三个列表的效果?

book1=[{"高校":["南京大学",天津大学","南开大学"]},{"国家":["印度","美国"]}]
book2=[{"高校":["南京大学","东华大学","中南大学"]},{"国家":["乌克兰","俄罗斯"]},{"论坛":["顶尖科学家论坛","统计之都"]}]

book3=[{"高校":["南京大学",天津大学","南开大学","东华大学","中南大学"]},{"国家":["印度","美国","乌克兰","俄罗斯"],{"论坛":["顶尖科学家论坛","统计之都"]}]

*数据结构可以调整为:每个book都是一个字典;
字典键名数量较多,需要自动遍历各键值;
最重要的,仔细观察前后键的值,合并后需要使键值成为原来的并集*
以上列表为简化后示例,实际列表包含更多内容

阅读 1.1k
1 个回答

你的源文件有语法问题,此外合并还需要考虑book1和book2数据结构问题,如果book1和book2数据结构是稳定的,比如子结构都是 先高校,再国家,然后论坛名称,则这个合并其实不难,当然合并时还需要注意名称重复的问题。大致是:

GX=[]
GJ=[]
LT=[]
for i in book1[0]["高校"]:
    GX.append(i)
for i in book1[1]["国家"]:
    GJ.append(i)
for i in book2[0]["高校"]:
    if GX.count(i)== 0:
        GX.append(i)
for i in book2[1]["国家"]:
    if GJ.count(i)== 0:
        GJ.append(i)
for i in book2[2]["论坛"]:
    LT.append(i)
    
newBook3=[{"高校":GX},{"国家":GJ},{"论坛":LT}]

如果没有顺序,则前面还要先判断键名才针对的进行遍历添加。

GX=[]
GJ=[]
LT=[]
def appendList(aList): 
    for i in range(len(aList)):
        for k,v in aList[i].items():
            if k == '高校' :
                CList=GX
            if k == '国家':
                CList=GJ
            if k == '论坛':
                CList = LT
            for z in v:
                if CList.count(z) == 0:
                    CList.append(z)

appendList(book1)
appendList(book2)
Book3=[{"高校":GX},{"国家":GJ},{"论坛":LT}]

不确定类型的,其实可以用:

newOBJ={}
newBook=[]
def appendList(aList): 
    for i in range(len(aList)):
        for k,v in aList[i].items():
            if k in newOBJ:
                CList = newOBJ[k]
            else :
                newOBJ[k]=[]
                CList = newOBJ[k]
            for z in v:
                if CList.count(z) == 0:
                    CList.append(z)
appendList(book1)
appendList(book2)
for k,v in newOBJ.items():
    newBook.append({k:v})
print(str(newBook))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏