目前,我有一个包含以下内容的列表:
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]]
我该怎么办才能解决重复的号码?
答案 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())))