[英]Comparing two lists items in python
我有两个文件加载到列表中。 第一个文件的内容如下所示:
d.complex.1
23
34
56
58
68
76
.
.
.
etc
d.complex.179
43
34
59
69
76
.
.
.
etc
第二个文件的内容也相同,但数值不同。 请考虑从一个d.complex。*到另一个d.complex。*作为一组。
现在,我有兴趣将一组第一个文件中的每个数值与第二个文件中的每个数值进行比较。 我想记录每个数字整体出现在第二个文件中的次数。
例如,d.complex.1中的数字23可能在文件2中的不同集合下出现了5次。 我要做的就是在文件2中记录数字23的出现次数,包括文件2的所有集合。
我最初的方法是将它们加载到列表中并进行比较,但是我无法实现这一点。 我在Google中搜索并遇到了集合,但作为python noob,我需要一些指导。 谁能帮我?
如果您觉得问题不清楚,请告诉我。 我还在这里粘贴了完整的文件1和文件2:
使用Python的open
函数打开文件,然后遍历其所有行。 检查线路是否包含一个数字,如果是的话,增加在其计数defaultdict
所描述的情况在这里 。
对其他文件重复此操作,然后比较结果字典。
首先创建一个可以加载给定文件的函数,因为您可能想要维护单个集合,并且还希望计算每个数字的出现,最好是对整个文件有一个字典,其中键是集合名,例如complex.1等,对于每个这样的集合,请在集合中保留另一个数字字典,下面的代码可以更好地说明
def file_loader(f):
file_dict = {}
current_set = None
for line in f:
if line.startswith('d.complex'):
file_dict[line] = current_set = {}
continue
if current_set is not None:
current_set[line] = current_set.get(line, 0)
return file_dict
现在,您可以轻松编写一个函数,该函数将在给定的file_dict中计算一个数字
def count_number(file_dict, num):
count = 0
for set_name, number_set in file_dict.iteritems():
count += number_set.get(num, 0)
return count
例如这是一个用法示例
s = """d.complex.1
10
11
12
10
11
12"""
file_dict = file_loader(s.split("\n"))
print file_dict
print count_number(file_dict, '10')
输出为:
{'d.complex.1': {'11': 2, '10': 2, '12': 2}}
2
您可能需要改进文件加载器,例如,跳过空行,转换为int等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.