2017-05-02 8 views
0

私は2つのリストを持っている:リスト間の違いを調べる方法は?

first_list = [('A', 'Name A'), ('B', 'Name B'), ('C', 'Other Name')] 
second_list = [('A', 'Name A'), ('B', 'Name B'), ('C', 'Name C'), ('D', 'Name D')] 

私はそのようなリストが欲しい:third_list = [('D', 'Name D')]

私が使用:third_list = list(set(second_list)^set(first_list))をしかし、それは私を返す:third_list = [('C', 'Name C'), ('D', 'Name D')]

私は、タプルの最初の項目が異なるところをリストしたいと思います。 ('C', 'Other Name')('C', 'Name C')が同じである必要があります。なぜなら、タプルの最初の項目が同じであるからです。

答えて

1

Check online demo

first_list = [('A', 'Name A'), ('B', 'Name B'), ('C', 'Other Name')] 
second_list = [('A', 'Name A'), ('B', 'Name B'), ('C', 'Name C'), ('D', 'Name D')] 

first_dict = dict(first_list) 
second_dict = dict(second_list) 
value = { k : second_dict[k] for k in set(second_dict) - set(first_dict) } 
print(value) 
1

これは仕事を行います。

first_second = [('A', 'Name A'), ('B', 'Name B'), ('C', 'Other Name')] 
second_second = [('A', 'Name A'), ('B', 'Name B'), ('C', 'Name C'), ('D', 'Name D')] 
d_one=dict(first_second) 
d_two=dict(second_second) 
res=[(i,j) for i,j in d_two.items() if i in set(d_two).symmetric_difference(set(d_one)) ] 

その後res

[('D', 'Name D')] 
1
[x for x in second_list if x[0] not in dict(first_list)] 

[('D', 'Name D')] 
+1

'ジップ(* first_list)[0]'きれいです最初のリストに '[x [0] for x 'を書くための明白でない方法です。より短く効率的なバージョンは 'dict(first_list)'でしょう。 – 9000

+0

提案をありがとう - 更新されました。 –

+1

first_listにあるがsecond_listにないアイテムも返す必要があると思いますか? –

関連する問題