【问题标题】:How to print Dictionary output into new line while looking for duplicate lines如何在查找重复行时将字典输出打印到新行
【发布时间】:2019-02-19 08:17:23
【问题描述】:

我刚刚选择了下面的代码,它可以正常工作以确定重复的行号和行号,并且工作正常。

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]

【问题讨论】:

标签: python-3.x


【解决方案1】:

通过删除 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}")

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

【讨论】:

    【解决方案2】:

    在你的函数中更改一行:

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

    【讨论】:

    【解决方案3】:

    将打印行更改为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 2020-02-27
      • 2019-11-22
      • 2013-08-27
      • 1970-01-01
      • 2011-05-26
      • 2011-11-02
      • 1970-01-01
      相关资源
      最近更新 更多