比较Python元组列表中的(几个)键

时间:2017-10-10 03:03:58

标签: python-3.x list compare tuples

我们! 我一直在尝试编写一个Python-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的作业名称和作业大小(以字节为单位)。

这是我的尝试:

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]

如您所见,作业的大小( 98602471 )" 配置"是至少三次相同。

如果我让自己清楚的话,我现在不会。

我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:0)

您真正想要做的是计算您的列表中的。您可以使用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

答案 1 :(得分:0)

假设有可能重构:

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

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

显然,对于列表中只有一个元素重复超过三次的情况的解决方案,并且当多个元素多次相同时,它将无法正常工作:

{{1}}