![](/img/trans.png)
[英]Count number of occurrences of dictionary values as nested list based on a query
[英]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.