比较(几个)元组的Python列表
问题描述:
我们! 我一直在尝试编写一个Python-3程序,用于比较元组列表中的键是否出现三次以上。比较(几个)元组的Python列表
这里是我的列表的例子:以上
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]
正如你可以在上面看到,这项工作“CONFIGS”的大小()是至少三次相同。
我现在没有,如果我让自己清楚。
我该怎么做?
谢谢!
答
你真的想要做的是在你的列表中计数对。您可以使用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
答
假设有可能重构:
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)
显然,这是对的情况下解决方案时只有一个中的元素列表重复多于三次,并且当几个元素几次相同时它将不能正常工作:
[22, 22, 11, 11] # not appropriate list view
是的!谢谢比尔贝尔。 就是这样! –
不客气,弗拉维奥。 –