根据列表中出现的次数追加值

时间:2018-03-17 14:12:54

标签: python

目前,我有一个包含以下内容的列表:

table = [[3, 'AVENGERS',PACIFIC'],[1, 'A WALK,DRAGONBALL'],[2, 'A WALK,DRAGONBALL'],[5, 'A WALK,DRAGONBALL'],[6, 'JAMES BOND,MISSION'],[7,'JAMES BOND,MISSION']]
如果在其他列表中也找到了字符串元素,那么我正在编写程序以从表中的每个列表中提取数值 < / p>

例如,字符串&#39; A WALK,DRAGONBALL&#39; 位于列表2,3和4 中,字符串&# 39; JAMES BOND,MISSION&#39; 分别位于列表5和6 中。对于每个类似的事件,我想提取索引0 处的数值并附加到列表中。

对于“步行,龙头&#39;和詹姆斯·邦德,使命&#39;我会追加:

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

在listNum列表中,第一个列表代表&#39; A WALK,DRAGONBALL&#39;以及“詹姆斯·邦德,使命”的第二个清单。这就是我的所作所为:

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]]

我该怎么办才能解决重复的号码?

3 个答案:

答案 0 :(得分:2)

您可以使用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]])

答案 1 :(得分:1)

您可以使用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]]

答案 2 :(得分:0)

您可以这样做:

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())))