【问题标题】:Python: How to check for the next index in list if exception occurs in present index of python listPython:如果python列表的当前索引中发生异常,如何检查列表中的下一个索引
【发布时间】:2019-09-28 12:36:34
【问题描述】:

我正在 python 中尝试一个简单的代码,其中我有一个字典列表,我将根据字典中的键过滤掉值。

我的字典列表是这样的:

Mylist = [
{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "MX"},
{"data": "two.mail-in.daimler.com.", "ttl": 3600},
{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "A"},
]

我想提取键值对为“type”的字典:“A”为此,我使用的操作码是:

a = list(filter(lambda type: type['type'] == 'A', Mylist))

这段代码没有问题。问题是,第二个字典没有一个名为“Type”的键,所以它会抛出一个 KeyError 异常并且程序停止而不检查第三个字典或列表的第二个索引。

我想要的是忽略第二个字典中的 keyerror 并检查第三个字典并打印出键值为“type”=“A”的字典

所以我尝试使用 try/except。

Mylist = [

{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "MX"},
{"data": "two.mail-in.daimler.com.", "ttl": 3600},
{"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "A"},
]

IP_Data =[]
for dicti in Mylist:

    try:
        a = list(filter(lambda type: type['type'] == 'A', Mylist))
        IP_Data.append(a)

    except:
        continue
print(IP_Data)

input()       

我已将结果存储在另一个名为 IP_Data 的列表中。当我运行代码时,我得到一个空数组的结果,即 [] 有人可以告诉我为什么会发生这种情况以及使整个字典存储在键值为 type=A 的数组中的任何方法

p.s 我也尝试过通过而不是继续,但我仍然遇到同样的问题。

谢谢。

【问题讨论】:

    标签: python exception


    【解决方案1】:

    在字典上使用dict.get() 方法以避免字典没有特定键的情况,如果字典中不存在该键,您可以设置默认值。试试这个:

    Mylist = [
    {"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "MX"},
    {"data": "two.mail-in.daimler.com.", "ttl": 3600},
    {"data": "two.mail-in.daimler.com.", "ttl": 3600, "type": "A"},
    ]
    a = list(filter(lambda type: type.get('type', None) == 'A', Mylist))
    

    输出

    [{'data': 'two.mail-in.daimler.com.', 'ttl': 3600, 'type': 'A'}]
    

    【讨论】:

      【解决方案2】:

      不要覆盖内置函数type,而不是显式尝试获取字典键,尝试使用dictionary.get('key', None),这样就不会出现键错误。

      【讨论】:

        【解决方案3】:

        而不是使用key来访问代码中的值

        a = list(filter(lambda type: type['type'] == 'A', Mylist))
        

        您可以修改代码以使用字典对象的 .get 方法。

        a = list(filter(lambda type: type.get('type','') == 'A', Mylist))
        

        在这里,如果键 'type' 不存在,您可以传递一个默认值作为第二个参数,在这种情况下,我将其传递为“”(空字符串)

        【讨论】:

          猜你喜欢
          • 2018-04-12
          • 1970-01-01
          • 1970-01-01
          • 2010-11-03
          • 2021-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多