2024-05-16 08:43:59 发布
网友
在一本大字典里,类似于
d = {} d['a']=[1,2,3,4] d['b']=[1,2,3,4,5,6] d['c']=[1,2] d['d']=[1,4]
如何快速删除列表中的“四个”?
有没有办法把名单上的四个人联系起来?就像在,消除一个会消除其他的。
你没有提到如果你的列表中有重复的,你想发生什么。我编写的解决方案(迭代然后删除..)不处理重复项。
>>> d = {'a':[1,2,3,4],'b':[1,2,3,4,5,6],'c':[1,2],'d':[1,4],'e':[1,4,4]} >>> for l in d.values(): ... if 4 in l: l.remove(4) ... >>> d {'a': [1, 2, 3], 'c': [1, 2], 'b': [1, 2, 3, 5, 6], 'e': [1, 4], 'd': [1]}
但这不是很有效。if 4 in l将迭代列表一次,而l.remove()将再次迭代列表。
if 4 in l
l.remove()
遍历字典的值并从每个列表中删除4:
for a in d.itervalues(): try: a.remove(4) except ValueError: pass
这并不是很有效,因为从列表中删除元素是一个O(n)操作。使用不同的数据类型(例如一组)以获得更好的性能。
如果设置了字典值,则可以
for a in d.itervalues(): a.discard(4)
似乎您可以从使字典“对称”中获益,您可以这样做:
def make_symmetric(D): for key, value in D.items(): for v in value: D.setdefault(v, set()).add(key) def add(D, a, b): D.setdefault(a, set()).add(b) D.setdefault(b, set()).add(a) def remove(D, a): values = D.pop(a) for v in values: D[v].remove(a)
像这样使用它:
>>> d = {'a': set([1, 2, 3, 4]), 'b': set([1, 2, 3, 4, 5, 6]), 'c': set([1, 2]), 'd': set([1, 4])} >>> make_symmetric(d) >>> d {1: set(['a', 'c', 'b', 'd']), 2: set(['a', 'c', 'b']), 3: set(['a', 'b']), 4: set(['a', 'b', 'd']), 5: set(['b']), 6: set(['b']), 'a': set([1, 2, 3, 4]), 'b': set([1, 2, 3, 4, 5, 6]), 'c': set([1, 2]), 'd': set([1, 4])} >>> remove(d, 4) >>> d {1: set(['a', 'c', 'b', 'd']), 2: set(['a', 'c', 'b']), 3: set(['a', 'b']), 5: set(['b']), 6: set(['b']), 'a': set([1, 2, 3]), 'b': set([1, 2, 3, 5, 6]), 'c': set([1, 2]), 'd': set([1])} >>> add(d, 'd', 4) >>> d {1: set(['a', 'c', 'b', 'd']), 2: set(['a', 'c', 'b']), 3: set(['a', 'b']), 4: set(['d']), 5: set(['b']), 6: set(['b']), 'a': set([1, 2, 3]), 'b': set([1, 2, 3, 5, 6]), 'c': set([1, 2]), 'd': set([1, 4])}
我在这里使用集合,但是你可以用列表做类似的事情。如果某个地方已经有了“对称”字典的实现,我不会感到惊讶。希望有人能给你指明正确的方向。
你没有提到如果你的列表中有重复的,你想发生什么。我编写的解决方案(迭代然后删除..)不处理重复项。
但这不是很有效。
if 4 in l
将迭代列表一次,而l.remove()
将再次迭代列表。遍历字典的值并从每个列表中删除4:
这并不是很有效,因为从列表中删除元素是一个O(n)操作。使用不同的数据类型(例如一组)以获得更好的性能。
如果设置了字典值,则可以
似乎您可以从使字典“对称”中获益,您可以这样做:
像这样使用它:
我在这里使用集合,但是你可以用列表做类似的事情。如果某个地方已经有了“对称”字典的实现,我不会感到惊讶。希望有人能给你指明正确的方向。
相关问题 更多 >
编程相关推荐