从具有特定键值的词典列表中删除元素

时间:2020-06-27 19:08:06

标签: python dictionary key

我有一堆地理位置保存为词典列表。关键字之一是国家/地区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的元素。

1 个答案:

答案 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
]