我们! 我一直在尝试编写一个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 )" 配置"是至少三次相同。
如果我让自己清楚的话,我现在不会。
我该怎么做?
谢谢!
答案 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}}