簡體   English   中英

根據列表中出現的次數附加值

[英]Appending values based on the number of occurrences in a list

目前,我有一個包含以下內容的列表:

table = [[3, 'AVENGERS',PACIFIC'],[1, 'A WALK,DRAGONBALL'],[2, 'A WALK,DRAGONBALL'],[5, 'A WALK,DRAGONBALL'],[6, 'JAMES BOND,MISSION'],[7,'JAMES BOND,MISSION']]

並且我正在編寫一個程序, 從表中的每個列表中提取數字值 (如果在其他列表中也找到字符串元素)。

例如,在列表2,3和4中找到字符串'A WALK,DRAGONBALL' 列表5和6中分別找到字符串'JAMES BOND,MISSION' 對於每個類似的情況,我想提取索引0處的數值並將其追加到列表中。

對於“行走,龍珠”和“詹姆斯邦德,任務”,我將附加以下內容:

movieName = ['A WALK,DRAGONBALL','JAMES BOND,MISSION']
movieNum = [[1,2,5],[6,7]]

在movieNum列表中,第一個列表代表“ A WALK,DRAGONBALL”的編號,第二個列表代表“ JAMES BOND,MISSION”的編號。 這是我所做的:

movie = []
movieNum = []
movielst = []

for i in range(len(table)-1):
    if table[i][1] == table[i+1][1]:
        movie.append(table[i][1])
        movieNum.append([table[i][0],table[i+1][0]])
print(movieNum)

for i in movie:
    if i not in movielst:
        movielst.append(i)

print(movielst)

我能夠正確打印出movielst,但是movieNum列表存在問題,而不是獲取非重復列表

[[1,2,5],[6,7]]

我越來越:

[[1,2],[2,5],[6,7]]

我該怎么辦才能解決重復的號碼?

您可以為此使用collections.defaultdict

from collections import defaultdict

table = [[3, 'AVENGERS','PACIFIC'],[1, 'A WALK,DRAGONBALL'],[2, 'A WALK,DRAGONBALL'],
         [5, 'A WALK,DRAGONBALL'],[6, 'JAMES BOND,MISSION'],[7,'JAMES BOND,MISSION']]

d = defaultdict(list)

for num, *movies in table:
    for movie in movies:
        d[movie].append(num)

d = {k: v for k, v in d.items() if len(v)>1}

結果

{'A WALK,DRAGONBALL': [1, 2, 5], 'JAMES BOND,MISSION': [6, 7]}

您可以提取結果字典的鍵和值:

keys, values = d.keys(), d.values()

# dict_keys(['A WALK,DRAGONBALL', 'JAMES BOND,MISSION'])
# dict_values([[1, 2, 5], [6, 7]])

您可以使用itertools.groupby

import itertools
table = [[3, 'AVENGERS','PACIFIC'],[1, 'A WALK,DRAGONBALL'],[2, 'A WALK,DRAGONBALL'],[5, 'A WALK,DRAGONBALL'],[6, 'JAMES BOND,MISSION'],[7,'JAMES BOND,MISSION']]
new_table = [list(b) for a, b in itertools.groupby(sorted(table, key=lambda x:x[1:]), key=lambda x:x[1:])]
last_results = [[b for b, _ in i] for i in new_table if len(i) > 1]

輸出:

[[1, 2, 5], [6, 7]]

您可以簡單地做:

final_dict={}

table = [[3, 'AVENGERS PACIFIC'],[1, 'A WALK,DRAGONBALL'],[2, 'A WALK,DRAGONBALL'],[5, 'A WALK,DRAGONBALL'],[6, 'JAMES BOND,MISSION'],[7,'JAMES BOND,MISSION']]


for i in table:
    if i[1] not in final_dict:
        final_dict[i[1]] = [i[0]]
    else:
        final_dict[i[1]].append(i[0])
print({i:j for i,j in final_dict.items() if len(j)>1})

輸出:

{'A WALK,DRAGONBALL': [1, 2, 5], 'JAMES BOND,MISSION': [6, 7]}

如果只需要名稱,則:

print(list(filter(lambda x:len(final_dict[x])>1,final_dict.keys())))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM