2011-06-08 11 views
1
d1 = ({'x':1, 'y':2}, {'x':3, 'y':4}) 
d2 = ({'x':1, 'y':2}, {'x':5, 'y':6}, {'x':1, 'y':6, 'z':7}) 

タプルd1d2の2つがあります。タプルはimmutableです。だから私はリストを使って別のタプルを追加しなければならない。より良い解決策はありますか?タプルを追加して一元化する方法

次の質問は、キーのタプルを 'x'とする方法です。 'x':キーの中の1が2回来たら、それは二重です。

append_tuple = ({'x':1, 'y':2}, {'x':5, 'y':6}, {'x':1, 'y':6, 'z':7}, {'x':1, 'y':2}, {'x':3, 'y':4}) 

unique_tuple = ({'x':1, 'y':2}, {'x':3, 'y':4}, {'x':5, 'y':6}) 

: 私はそれらが重複した要素で、キーの値が2つの辞書に値を保存している「x」を言うならば辞書のタプルから重複要素を削除します。

+0

あなたは何をしようとしているのかをもう少し詳しく知ることができますか? –

+0

2番目の部分がhttp://stackoverflow.com/questions/3665414/how-to-uniqufy-the-tuple-elementの複製であると思われる – Chowlett

+0

キー値が 'x'と書かれている場合、重複要素をdictのタプルから削除したい'は2つの辞書に値を保存していますが、それらは重複する要素です。 –

答えて

2
  1. タプルを拡張する方法はありません。私はあなたが常にこれをやっているなら、タプルから離れて移動するか、あるいはデザインを変更する必要があると言います。

  2. 間違った種類のコレクションを使用しているように聞こえます。しかし、あなたは、既存のSO How to uniqufy the tuple element?

2

タプルは、アイテムの数が固定されているデータのための一般的であり、それぞれの場所で、並べ替えのようなものので、独自の「意味」を持っている答えを使用して、辞書から複製キーを削除することができ重複を追加、削除することは決してタプル上で自然ではなく、設計されていません。リストに変換してこれらの操作を行うタプルに悩まされている場合、変換は完全に合理的です。

追加するために、あなたがしたい:

d1 += (ITEM,) 

をして拡張するために、あなただけ行いたい:uniquifyingについては

d1 += d2 

を:

unique_list = [] 
for i1 in append_tuple: 
    if not any((k,v) in i2.items() for (k,v) in i1.items() for i2 in unique_list): 
     unique_list.append(i1) 
unique_tuple = tuple(unique_list) 

それはのように思えるかもしれませんより簡潔で洗練されたソリューションがありますが、あなたがしようとしていることはかなり具体的です。このようなものについては明示的にする方が良いforループでリストを構築して、それを理解またはそれに類するものに強制しようとするよりもむしろ。

+0

タプルを単に追加するだけの場合は、リストに変換するのはなぜですか? d1 = d1 + d2はうまく動作し、その点ではd1 + = d2も同様です。 – DSM

+0

@DSM:よろしくお願いします。私はあなたがそれらを追加するときに奇妙な演技タプルを覚えていましたが、私は通常、タプルの追加がペアごとになると期待しています。編集されました。 –

関連する問題