Список продуктов значений для всех ключей, которые совпадают в двух словарях - PullRequest
2 голосов
/ 16 сентября 2011

У меня есть две хеш-таблицы в виде словарей.Ключи отображают объекты в список экземпляров указанных функций.

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

Что мне нужно, так это список или, в идеале, массив значений, который содержит все комбинации вхождений для двух совпадающих объектов.Итак, в этом случае:

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

Так как это в какой-то момент должно выполняться максимально быстро при больших диктах, я надеялся использовать понимания, так как они понятны для Cython.Но они только привели меня сюда:

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

Спасибо за вашу помощь!

1 Ответ

3 голосов
/ 16 сентября 2011
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)]
...