在Python 2.7

时间:2016-09-03 15:11:45

标签: python arrays list python-2.7 count

好的,我收到了大量文字。我提取与正则表达式的匹配(在这里省略,因为它并不重要,我对此不好,所以你不知道我的正则表达式是多么丑陋:))并计算它们。然后,为了便于阅读,我将元素拆分并以我需要的方式打印出来:

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]

请注意:

  • 在最终结果中我将需要5组(A,B,C,D,E)
  • 元素可能会有所不同,例如明天131可能不存在,但我可能有232组在A组中,元素数量每天都不同
  • 如果每组中的元素都按数字排序,那将是完美的,但不是强制性的。
  • 听起来可能很明显,但无论如何我都会说清楚,我确切地知道哪个元素需要去哪个组。如果有任何帮助, A组可以包含(102,103),B(104,105,106,201,202,203),C(204,205,206,301,302,303,304),D(107,108,109,110,208,209,210,211,213,305,306,307),E(131,132,133,231,232)

脚本需要获取当天出现的结果,将它们与上面的列表进行比较,然后排序到相关组中。

提前致谢!

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)