Как сгруппировать два вложенных списка между собой в python? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть два вложенных списка:

list1=[['AH_ID', -20000, 'First'],['HT_ID', -20000, 'Second'],['YE_ID', -20000, 'First']]
list2=[['AH_ID', -30000, 'First'],['ZZ_ID', -20000, 'Third'],['YE_ID', 17000, 'Second']]

Я хочу сгруппировать их вложенные списки следующим образом:

first: сгруппировать по первому элементу списка (они служат мне как id), если идентификатор одинаков в двух списках, изменяются только последующие элементы.

секунда: последующие элементы должны быть заменены на элементы из списка 2.

третий: вывести все вложенные списки (без их изменения), если их ID не совпадает.

Я хотел бы получить этот вывод.

final_list=[['AH_ID', -30000, 'First'],['HT_ID', -20000, 'Second'],['YE_ID', 17000, 'Second'],['ZZ_ID', -20000, 'Third']]

Я думаю, должен ли я использовать словарь для группировки вложенных списков по их первому элементу?

Я пытался использовать метод set , но мне не удалось сделать то, что я хочу.

1 Ответ

1 голос
/ 15 мая 2019

Вы действительно должны использовать словарь, управление ключами там намного проще: Проверьте этот код:

# returns a sublist based on a key match
 def sublist_fromkey(list, key):
    for sublist in list:
        if sublist[0] == key:
            return sublist
    return []

def main():
    list1=[['AH_ID', -20000, 'First'],['HT_ID', -20000, 'Second'],['YE_ID', -20000, 'First']]
    list2=[['AH_ID', -30000, 'First'],['ZZ_ID', -20000, 'Third'],['YE_ID', 17000, 'Second']]
    # stores keys for each list
    l1_keys=[]
    l2_keys=[]
    # final list is contents of list2 and anything unique on list1
    final_list=list2
    # populate keys for each list
    for x in list1:
        l1_keys.append(x[0])
    for x in list2:
        l2_keys.append(x[0])
    # find anything unique in list1 and add it
    for key_1 in l1_keys:
        if key_1 not in l2_keys:
                final_list.append(sublist_fromkey(list1,key_1))
    print(final_list)

if __name__== "__main__":
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...