如何比较字典的值并使用python为答案创建一个新字典



我有一个这样的字典:

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的所有值中不能有一个以上索引为[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)]}
索引[0]处的

如'2'出现在dict的所有值中!

首先,需要一个包含所有第一个元素的集合(按键分组):

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

要找到在所有条目中出现的值,您可以执行集合交集:

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

然后可以过滤字典,使其只包含属于交集的对:

filtered = { k:[pair for pair in v if pair[0] in similar] 
             for k,v in dict.items() }

如果你所说的"相似"是指元组的第一个索引是相同的,那么类似于:

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

最新更新