【发布时间】:2021-04-20 22:58:28
【问题描述】:
假设我有一本字典,其中元组作为键,元组列表作为值,例如:
d={(0,1):[(1,1)],
(0,2):[(1,1),(1,2)],
(0,3):[(1,1),(1,2),(1,3)]}
我想删除所有条目,使其值包含在另一个键的值中,例如:
从 d 我想删除带有键 (0,1) 的条目,因为 (1,1) 包含在 [(1,1),(1,2)] 中 并删除键为 (0,2) 的条目,因为 [(1,1),(1,2)] 包含在 [(1,1),(1,2),(1,3)] 中。 列表中元组的顺序很重要。
我可以使用一堆 for 循环来解决这个问题,如下所示:
for key, val in d.items():
for k,v in d.items():
for i in range(0, len(val)):
if val[i] in v and len(v) - len(val) == 1:
del_me = True
else:
del_me = False
break
if del_me:
to_del.append(key)
for key in set(to_del):
del d[key]
编辑:(进一步解释) 键在这里并不重要,但稍后会很重要。 换句话说: 让 a,b,c,d 表示唯一的元组 让 k1,k2,..., 表示键
让我们有条目:
k1:[a],
k2:[d],
k3:[a,b],
k4:[b,a],
k5:[a,b,c],
我想最终得到: k2,k4,k5
删除的条目将是: k1 因为 a 在 k3 k3 因为 a,b 在 k5 中
看到这里眼睛疼,抱歉。
什么是pythonic方式来做到这一点?
【问题讨论】:
-
For-loops 是pythonic。我仍然不完全清楚您要做什么。
-
键将有序的元组列表作为值。可以通过将更多元组附加到已经是另一个键的值的列表来创建不同键的值。然后我想用更短的列表删除之前的键。
-
换句话说:我添加了另一个条目。该值是通过将一些新对附加到现有条目的值来构造的。我想删除那个已经存在的条目。我只想保留不包含在另一个条目序列中的最长序列的条目。现在清楚了吗?
-
字典的顺序会一直保持不变吗?我的意思是最后你会得到只有一个键值对的字典吗? @4rk
-
会有不止一个键值对,其值的顺序是唯一的;我的意思是最后我希望每个唯一的元组序列都有一个键值对
标签: python dictionary