我有一堆地理位置保存为词典列表。关键字之一是国家/地区ID,我想删除所有国家/地区编号与112不同的位置。我编写了这段代码。由于某些原因,它会删除非112条目的大部分,但不会删除所有非112条目。这是我为此过滤编写的循环:
counter = 0
i=0
while counter < len(CS_list):
country = CS_list[i]["AddressInfo"].get("CountryID")
if country != 112:
CS_list.pop(i)
else:
i += 1
counter += 1
Here是运行此循环后的列表。如您所见,即使删除了很多这样的条目,仍然还有一些非112的值。这真的让我感到困惑。知道为什么会这样吗?
编辑: This是输入列表元素的示例。运行循环后,我希望拥有相同的列表,但没有所有国家/地区ID都不同于112的元素。
答案 0 :(得分:0)
通常,您将只构建一个仅包含所需元素的新列表。
countries = [
{'AddressInfo': {'CountryID': 112}},
{'AddressInfo': {'CountryID': 8}},
{'AddressInfo': {'CountryID': 2}},
{'AddressInfo': {'CountryID': 4}},
{'AddressInfo': {'CountryID': 112}},
]
countries = [
country for country in countries
if country.get('AddressInfo', {}).get('CountryID') == 112
]
print(countries)
如果您明确希望从现有列表中删除这些条目,则可以将列表理解的结果作为切片分配给原始列表:
countries[:] = [
country for country in countries
if country.get('AddressInfo', {}).get('CountryID') == 112
]