【问题标题】:python3: set and itertools.groupby yielding different outcomes? [duplicate]python3:set 和 itertools.groupby 产生不同的结果? [复制]
【发布时间】:2019-11-21 11:14:49
【问题描述】:

我想使用IPWhois 解析一些 Apache 访问日志。

我想根据asn_description 字段对IPWhois 结果进行分组。

以下sn-p中的set和itertools.groupby()是不是会产生不同的结果?

descs = set()

with open(RESULTSFILE, 'a+') as r:
    for description, items in groupby(results, key=lambda x: x['asn_description']):
        print('ASN Description: ' + description)
        descs.add(description)

print(descs)

例如

ASN Description: GOOGLE - Google LLC, US
ASN Description: AVAST-AS-DC, CZ
ASN Description: FACEBOOK - Facebook, Inc., US
ASN Description: AVAST-AS-DC, CZ
ASN Description: AMAZON-AES - Amazon.com, Inc., US
ASN Description: FACEBOOK - Facebook, Inc., US
ASN Description: AMAZON-02 - Amazon.com, Inc., US
ASN Description: AMAZON-02 - Amazon.com, Inc., US
ASN Description: GOOGLE - Google LLC, US
ASN Description: GOOGLE-2 - Google LLC, US
ASN Description: AMAZON-02 - Amazon.com, Inc., US
{'FACEBOOK - Facebook, Inc., US', 'AVAST-AS-DC, CZ', 'AMAZON-AES - Amazon.com, Inc., US', 'GOOGLE-2 - Google LLC, US', 'GOOGLE - Google LLC, US', 'AMAZON-02 - Amazon.com, Inc., US',

【问题讨论】:

  • Set 会返回唯一的值,groupby 只返回连续的唯一值

标签: python itertools whois


【解决方案1】:

将您的代码更改为以下内容并尝试。如果您不需要items,则可以使用_ 将其从for 循环中删除。

import itertools
descs = dict()

with open(RESULTSFILE, 'a+') as r:
    for i, (description, items) in enumerate(itertools.groupby(results, key=lambda x: x['asn_description'])):
        print('ASN Description: ' + description)
        descs.update({i: description})

print(descs)

【讨论】:

    猜你喜欢
    • 2018-06-27
    • 2018-09-07
    • 1970-01-01
    • 2018-12-30
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多