首页 > 解决方案 > 如何删除列表中的dict(JSON对象)?

问题描述

我正在从我的地区发行列表中删除具有不同 m_y(month_year 例如 12_2018)的电影发行。我在 delete 方法中传递其完整的电影对象以从列表中删除该对象,这是我的代码:

def remove_release_object(self, release_object, month_year):
    # Quick fix, to delete this exact item, set ti back
    release_object['m_y'] = month_year
    if release_object['region'] == 1:
        self.releases[month_year]["europe"].remove(release_object)
    if release_object['region'] == 2:
        self.releases[month_year]["north_america"].remove(release_object)
    if release_object['region'] == 3:
        self.releases[month_year]["australia"].remove(release_object)
    if release_object['region'] == 4:
        self.releases[month_year]["new_zealand"].remove(release_object)
    if release_object['region'] == 5:
        self.releases[month_year]["japan"].remove(release_object)
    if release_object['region'] == 8:
        # Worldwide release really only applies to the big region (na, eu, jp, aus, nz)
        self.releases[month_year]["europe"].remove(release_object)
        self.releases[month_year]["north_america"].remove(release_object)
        self.releases[month_year]["australia"].remove(release_object)
        self.releases[month_year]["new_zealand"].remove(release_object)
        self.releases[month_year]["japan"].remove(release_object)

在调用 remove() 之后它仍然不起作用,我什至尝试设置一个快速修复来放置对象,就像它最初看到旧的 m_y 一样,但仍然没有任何东西被删除

标签: python

解决方案


__eq__当您想要删除一个列表中的一项时调用 Python 。这是一个帮助您理解它的示例。

class A(object):
    def __eq__(self, other):
        print('eq was called')
        return True

l = [A()]
print(l)
l.remove(A())
print(l)

这意味着您必须保证 release_object 具有可比性,并且 release_object 等于 movie_object。

还有一点,dict 是可比较的,{'a': 1} 等于另一个 {'a': 1}。这意味着您的 release_object 不等于 movie_object。你可以试试:

l = [{'a': 1}]
print(l)
l.remove({'a': 1})
print(l)

所以你应该检查你的代码,并检查release_object和movie_object之间的区别。


推荐阅读