我是python的新手。我在列表中有多个字典,我想基于值进行一些分析。我使用lambda的原因是因为该功能并非总是预期的。我只显示2个字典供参考,但是输出有时会给我多个字典。

statistics = [{"ip_dst": "10.0.0.1", "ip_proto": "icmp", "ip_src": "10.0.0.3",
               "bytes": 1380, "port_dst": 0, "packets": 30, "port_src": 0},
              {"ip_dst": "10.0.0.3", "ip_proto": "icmp", "ip_src": "10.0.0.1",
               "bytes": 1564, "port_dst": 0, "packets": 34, "port_src": 0}]

packets = filter(lambda x: x[0]["packets"], statistics)
ip_src = filter(lambda x: x[0]["ip_src"], statistics)
ip_proto = filter(lambda x: x[0]["ip_proto"], statistics)


当我使用print语句时,它给了我一个关键错误:0。我知道数据包的值是一个整数,对于ip_src / ip_proto,该值是一个字符串。

如何使用lambda访问这些值?

最佳答案

如果您尝试将数据包提取为单独的项目列表,则不会使用过滤器。过滤器只会减少新列表中词典的数量。您可以使用列表理解,

packets = [x['packets'] for x in statistics]
print(packets)
# [30, 34]


这将创建统计信息中x['packets']值的列表。

其他两组值相同。

09-25 21:31