如何使用python比较字典的值并为答案创建新字典
我有一本字典,像:如何使用python比较字典的值并为答案创建新字典,python,list,dictionary,tuples,Python,List,Dictionary,Tuples,我有一本字典,像: 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)]} 我想比较这本字典的值,并制作另一个dict,在所有元组列表中包含类似的索引[0],如: dict = {'Books' : [(3,4)], 'CDs' : [(3,5), (3,
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)]}
我想比较这本字典的值,并制作另一个dict,在所有元组列表中包含类似的索引[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的所有值中 如果“相似”是指元组的第一个索引相同,则类似于:
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)]}
首先,您需要一个包含所有第一个元素的集合(按键分组): 要查找在所有条目中显示的值,可以执行以下操作:
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() }
然后,您可以过滤dict,使其仅具有属于交叉点的对:
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() }
请精确定义“相似性”。切比雪夫距离的结果是否算作相似?(3,4)与(2,3)和(4,3)相似吗?你说的“相似”可能是指“普通”吧?如:“制作另一个dict,其中包含所有列表共用的
索引[0]
的值”。我解释得对吗?(在第一个示例中,2
并不常见-因为它在'CDs'
中不存在-但在第二个示例中,它变得很常见)@mgibsonbr:正是:)