2017-01-28 3 views
2

クラス(キー)と2つの異なるデータ/ファイルのリスト値を持つdefaultdictのリストをマージします。 一意のキーを使用してリストをマージしたいが、リストの値は別々にしておきたい。`defaultdict`でキーを使ってリストをマージする方法はありますが、リスト内のキーはそのキーの中で別にしておきますか?

入力:

defaultdict(<class 'list'>, {'1335': ['C', 'T', 'T', 'C', 'T', 'G'], '254': ['T', 'T', 'G', 'C', 'G', 'G']})

defaultdict(<class 'list'>, {'1335': ['A', 'C', 'A', 'A', 'C', 'A'], '254': ['A', 'G', 'A', 'T', 'A', 'A']})

出力:

defaultdict(<class 'list'>, {'1335': ['C', 'T', 'T', 'C', 'T', 'G'], ['A', 'C', 'A', 'A', 'C', 'A'] , '254': ['T', 'T', 'G', 'C', 'G', 'G'], ['A', 'G', 'A', 'T', 'A', 'A']})

おかげで、

+0

はdictsの両方が正確に同じ鍵を持っていますか?その場合、希望の出力は何ですか? – niemmi

+0

はい、ほとんどのキーは同じですが、いくつかのキーが各データに固有のものである場合、他のデータファイルにインスタンスが存在する可能性があります。その場合、私も併合したいですが、それは1つのデータからのリストだけを持っています。ありがとう、 – everestial007

答えて

2

新しい辞書の値をリストのリストにします。

あなたはリストの新しいdefaultdictを作成し、各辞書からリスト値を追加することができます

input_dicts = [dict1, dict2] 

result = defaultdict(list) 

for to_merge in input_dicts: 
    for key, value in to_merge: 
     result[key].append(value) 
+0

私はこれをチェックします。辞書がたくさんある場合は、 'merged_dict = defaultdict(dict1、dict2)'を実行することも可能ですか?ありがとう – everestial007

+0

いいえ、重複したキーは許されないので、最新の値だけを保持します –

+0

したがって、あなたのソリューションは2つの異なるデフォルトのdictで動作します。もし私が3つ以上の 'defaultdict'を使ってそれをしたいのなら、どうしたらいいですか?私の実際のデータにはいくつかの 'defaultdicts'があります – everestial007

関連する問題