2011-09-16 10 views
2

辞書の形式で2つのハッシュテーブルがあります。キーは、フィーチャを前記フィーチャの出現のリストにマップする。私は必要なもの2つの辞書に一致するすべてのキーの値のリスト

a_dict = {'a': [1,2], 'b': [2,], 'c': [1,3]} 
b_dict = {'a': [6], 'c': [4]} 

は、リストまたは2つのマッチング機能の出現のすべての組み合わせが含まれている理想的numpyの配列です。この場合、中のSO:

result = [[1,6], 
      [2,6], 
      [1,4], 
      [3,4]] 

これはいくつかの点であることからは、私は彼らがcythonによって理解されているので、内包表記を使用するように期待していた大型dictsにできるだけ速く実行するようになっています。しかし、彼らは私をここに連れて来ました:

>>> [itertools.product(value, a_dict[key]) for key,value in b_dict.items()] 
[<itertools.product object at 0x1004a2960>, <itertools.product object at 0x1004a29b0>] 

ありがとうございました!

+0

ところで、「b_dict」にのみ存在する項目はありますか? – eph

+0

はい。それはほぼ保証されています。 – John

答えて

3
import numpy as np 
import itertools 

a_dict = {'a': [1,2], 'b': [2,], 'c': [1,3]} 
b_dict = {'a': [6], 'c': [4]} 

print(list(itertools.chain.from_iterable(
    itertools.product(value, b_dict[key]) for key,value in a_dict.iteritems() 
    if key in b_dict))) 
# [(1, 6), (2, 6), (1, 4), (3, 4)] 
関連する問題