我有一个这样的字典:
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)]}