【问题标题】:Comparing (several) keys in a Python list of tuples比较 Python 元组列表中的(几个)键
【发布时间】:2017-10-10 03:03:58
【问题描述】:

伙计们! 我一直在尝试编写一个 Python-3 程序来比较元组列表中的键是否出现超过 3 次。

这是我的清单的一个例子:

my_list = [('Configs', 98602471),
     ('Linux_Server', 10137300),
     ('Job-1', 10137300),
     ('Job-2', 10137300),
     ('Job-3', 10137300),
     ('Catalog', 10256456),
     ('Configs', 98602471),
     ('Linux_Server', 100),
     ('Job-1', 101),
     ('Job-2', 102),
     ('Job-3', 103),
     ('Catalog', 10277555),
     ('Configs', 98602471),
     ('Linux_Server', 100),
     ('Job-1', 104),
     ('Job-2', 105),
     ('Job-3', 106),
     ('Catalog', 10297994)]

上面的列表代表了 Baculas 的 Job 的名称和 Job 的大小(以字节为单位)。

这是我的尝试:

from collections import defaultdict

d = defaultdict(list)
for k, v in my_list:
     d[k].append(v)

for key, d in d.items():
     print(key, d)

结果如下:

Job-3 [10137300, 103, 106]

Job-1 [10137300, 101, 104] 

Catalog [10256456, 10277555, 10297994] 

Configs [98602471, 98602471, 98602471] 

Linux_Server [10137300, 100, 100] 

Job-2 [10137300, 102, 105] 

我需要结果只显示他们的尺寸相同超过三倍的工作(或多个工作)。 例如,在这种情况下,我只需要为我打印以下内容:

Configs [98602471, 98602471, 98602471]

正如您在上面看到的,作业“Configs”的大小(98602471)至少相同三倍。

如果我说清楚的话,我现在不知道。

我该怎么做?

谢谢!

【问题讨论】:

    标签: python-3.x list compare tuples


    【解决方案1】:

    您似乎真正想做的是计算您的列表中的 pairs。您可以使用 Counter 对象来执行此操作,然后查看其键以查找计数不少于 3 的任何项目。

    my_list = [('Configs', 98602471),
        ('Linux_Server', 10137300),
        ('Job-1', 10137300),
        ('Job-2', 10137300),
        ('Job-3', 10137300),
        ('Catalog', 10256456),
        ('Configs', 98602471),
        ('Linux_Server', 100),
        ('Job-1', 101),
        ('Job-2', 102),
        ('Job-3', 103),
        ('Catalog', 10277555),
        ('Configs', 98602471),
        ('Linux_Server', 100),
        ('Job-1', 104),
        ('Job-2', 105),
        ('Job-3', 106),
        ('Catalog', 10297994)]
    
    from collections import Counter
    
    counts = Counter(my_list)
    
    for count in counts:
        if counts[count]>=3:
            print (count, counts[count])
    

    结果:

    ('Configs', 98602471) 3
    

    【讨论】:

      【解决方案2】:

      假设有可能重构:

      for key, d in d.items():
           print(key, d)
      

      进入

      for key, d in d.items():
          if len(set(d)) + 1 < len(d):
              print(key, d)
      

      显然这是针对列表中只有一个元素重复次数超过3次的情况的解决方案,当多个元素多次相同时它会无法正常工作:

      [22, 22, 11, 11]  # not appropriate list view
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        • 2017-03-12
        • 1970-01-01
        相关资源
        最近更新 更多