好的,我收到了大量文字。我提取与正则表达式的匹配(在这里省略,因为它并不重要,我对此不好,所以你不知道我的正则表达式是多么丑陋:))并计算它们。然后,为了便于阅读,我将元素拆分并以我需要的方式打印出来:
import re
f = re.findall(r"(...)", PF)
a = [[y,f.count(y)] for y in set(f)]
(' '.join(map(str, j)) for j in w)
for element in w:
print element
结果类似于
['202', 1]
['213', 2]
['210', 2]
['211', 2]
['208', 2]
['304', 1]
['107', 2]
['133', 1]
['132', 1]
['131', 2]
我需要的是对元素进行分组,以便得到像
这样的输出A ['133', 1]
['132', 1]
['131', 2]
B ['202', 1]
['213', 2]
C ['304', 1]
['107', 2]
['210', 2]
['211', 2]
['208', 2]
请注意:
脚本需要获取当天出现的结果,将它们与上面的列表进行比较,然后排序到相关组中。
提前致谢!
答案 0 :(得分:0)
您可以设置将元素映射到组的哈希。然后,您可以将每个数组项从[element,count]转换为(group,element,count)(使用元组使其更易于排序等)。对该数组进行排序,然后使用循环或reduce
将其转换为最终输出。
mapElementsToGroups = {'131': 'A', '202': 'B', '304': 'C', …}
elementsFoundByGroup = {}
for (group, element, count) in sorted(
[(mapElementsToGroups[item[0]], item[1], item[2])
for item in a]
):
elementsFoundByGroup[group] = elementsFoundByGroup.get(group, []) + [(element, count)]
现在,您可以使用字典将每个组名称映射到该组中的元素和计数列表。快速打印是:
print [
group + " " +
elements.join("\n " + " "*len(group))
for (group,elements) in sorted(elementsFoundByGroup.items())
].join("\n")
答案 1 :(得分:0)
一个(可能不是最优雅的)解决方案是使用映射定义字典,然后查找该元素所属的组的名称。
elements = { "133": "A", "132": "A",
"202": "B",
... }
然后可以将元素添加到组字名为键的新字典中:
groups = {"A":[], "B": [], ...}
for element, count in a:
group = elements[element]
groups[group].append( (element, count) )
for group in groups:
groups[group].sort() # sort by element
for element, count in groups[group]:
print "%s %s %s" % (group, element, count)