代码之家  ›  专栏  ›  技术社区  ›  Karn Kumar

如何在查找重复行时将字典输出打印到新行

  •  0
  • Karn Kumar  · 技术社区  · 6 年前

    from collections import defaultdict
    def find_dupl(log):
        output = defaultdict(list)
        with open(log) as f:
            for i, line in enumerate(f):
                line = line.strip()
                output[line].append(i)
            print({k: v for k, v in output.items() if len(v) > 1})
    find_dupl('rhel65')
    

    结果输出如下,i将每个主机名或项目打印到新行中。

    {'hostlab01': [0, 1], 'hostlab02': [34, 35, 36]}
    

    我们希望:

    hostlab01: [0, 1] 
    hostlab02: [34, 35, 36]
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Poolka    6 年前

    在函数中更改一行:

    print(*['{}: {}'.format(k, v) for k, v in output.items() if len(v) > 1], sep='\n')
    
        2
  •  1
  •   cestMoiBaliBalo    6 年前

    通过删除print语句并定义生成器来更改函数的输出:

    def find_dupl(log):
        output = defaultdict(list)
        with open(log) as f:
            for i, line in enumerate(f):
                line = line.strip()
                output[line].append(i)
       result = {k: v for k, v in output.items() if len(v) > 1}
       for k, v in result.items():
           yield k, v
    
    for key, value in find_dupl('rhel65'):
        print(f"{key}: {value}")
    

    如果我是对的话,那应该会给你预期的结果。

        3
  •  1
  •   VanTan    6 年前

    print("\n".join("{}\t{}".format(k, v) for k, v in output.items() if len(v) > 1))