0

次のような辞書があります。

dict = {'Books' : [(2,2), (3,4), (7,19)],
        'CDs'   : [(1,9), (3,5), (3,6), (10,9)],
        'Toys'  : [(0,1), (2,8), (3,3), (4,6)]}

このディクショナリの VALUES を比較し、index[0]タプルのすべてのリストで同様のものを含む別のディクテーションを作成したい:

dict = {'Books' : [(3,4)],
        'CDs'   : [(3,5), (3,6)],
        'Toys'  : [(3,3)]}

dict のすべての値に index[0] を持つ同様のタプルが複数存在することはできません!
この問題に対して複数の回答を見つけましたが、何も良いことはありませんでした。
次の口述は私の場合ではありません:

dict = {'Books' : [(2,2), (3,4), (7,19)],
        'CDs'   : [(1,9), (2,7)(3,5), (3,6), (10,9)],
        'Toys'  : [(0,1), (2,8), (3,3), (4,6)]}

like '2' at index[0] は、dict のすべての値で発生します!

4

2 に答える 2

1

まず、最初のすべての要素(キーでグループ化)を含むセットが必要です。

firsts = [set([pair[0] for pair in v]) for v in dict.values()]

すべてのエントリに表示される値を見つけるには、次のように交差を設定します。

similar = reduce(lambda x,y: x.intersection(y), firsts)

次に、交差点に属するペアのみを持つようにdictをフィルタリングできます。

filtered = { k:[pair for pair in v if pair[0] in similar] \
             for k,v in dict.items() }
于 2013-03-01T06:49:09.187 に答える
0

「類似」とは、タプルの最初のインデックスが同じであることを意味する場合、次のようになります。

d =  {'Books' : [(2,2), (3,4), (7,19)],
        'CDs'   : [(1,9), (3,5), (3,6), (10,9)],
        'Toys'  : [(0,1), (2,8), (3,3), (4,6)]}

def find_when(d, n):
    return {k: [el for el in v if el[0] == n] for k, v in d.iteritems()}

print find_when(d, 3)
# {'CDs': [(3, 5), (3, 6)], 'Books': [(3, 4)], 'Toys': [(3, 3)]}
于 2013-03-01T06:49:01.377 に答える