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)]}

像 index[0] 处的 '2' 出现在 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)

Then you can filter the dict to have only pairs that belong to the intersection:

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 回答