Python 3.x 列表中的Python分组

Python 3.x 列表中的Python分组,python-3.x,Python 3.x,我正在处理一个文本文件,我通过findall提取了我感兴趣的信息。然后,这些数据以如下字符串形式呈现给我: user1 : null user2 : Joe Bob user3 : Sandra Sandy user4 : John Doe user5 : Joe Bob user6 : John Doe user7 : John Doe 或列表,例如: ['user1 : null, user2 : Joe Bob , user3 : Sandra Sandy, user4 : J

我正在处理一个文本文件,我通过findall提取了我感兴趣的信息。然后,这些数据以如下字符串形式呈现给我:

user1 : null 
user2 : Joe Bob 
user3 : Sandra Sandy 
user4 : John Doe
user5 : Joe Bob 
user6 : John Doe 
user7 : John Doe
或列表,例如:

['user1 : null, user2 : Joe Bob , user3 : Sandra Sandy, user4 : John Doe, user5 : Joe Bob, user6 : John Doe, user7 : John Doe']
我想循环这些内容,并根据第二列将它们分组,例如:

John Doe : user4, user6, user7
Joe Bob: user5, user2
null: user1
Sandra Sandy: user3
最终目标是能够提取“owner”变量,如johndoe,并创建一个通知单,说明他拥有这些用户

下面的代码对我列表中的经理进行了唯一化,并通过我的用户\u manager\u str进行解析,并对他们进行了相应的分组,但我仍然没有一个好的方法将他们分开,以便我可以为每个经理创建唯一的票证

# Get a unique list of managers
for i in manager:
    if i not in unique_list:
        unique_list.append(i)

for i in unique_list:
    uniq_manager = i
    #print(uniq_manager)
    for line in user_manager_str.split('\n'):
        if uniq_manager in line:
            #print('Creating SN ticket for ' + uniq_manager)
            print('SN content is: ' + line)

任何帮助都将不胜感激。

使用
集合。defaultdict

Ex:

from collections import defaultdict 

s = """user1 : null 
user2 : Joe Bob 
user3 : Sandra Sandy 
user4 : John Doe
user5 : Joe Bob 
user6 : John Doe 
user7 : John Doe"""

result = defaultdict(list)
for line in s.splitlines():                        #Iterate each line
    line = line.strip().split(":")                 #Split string by ":"
    result[line[1].strip()].append(line[0].strip())  #Create key-value

for k, v in result.items():
    print(k, ":", ",".join(v))
 null : user1 
 Joe Bob : user2 ,user5 
 Sandra Sandy : user3 
 John Doe : user4 ,user6 ,user7 
输出:

from collections import defaultdict 

s = """user1 : null 
user2 : Joe Bob 
user3 : Sandra Sandy 
user4 : John Doe
user5 : Joe Bob 
user6 : John Doe 
user7 : John Doe"""

result = defaultdict(list)
for line in s.splitlines():                        #Iterate each line
    line = line.strip().split(":")                 #Split string by ":"
    result[line[1].strip()].append(line[0].strip())  #Create key-value

for k, v in result.items():
    print(k, ":", ",".join(v))
 null : user1 
 Joe Bob : user2 ,user5 
 Sandra Sandy : user3 
 John Doe : user4 ,user6 ,user7 

使用
collections.defaultdict

Ex:

from collections import defaultdict 

s = """user1 : null 
user2 : Joe Bob 
user3 : Sandra Sandy 
user4 : John Doe
user5 : Joe Bob 
user6 : John Doe 
user7 : John Doe"""

result = defaultdict(list)
for line in s.splitlines():                        #Iterate each line
    line = line.strip().split(":")                 #Split string by ":"
    result[line[1].strip()].append(line[0].strip())  #Create key-value

for k, v in result.items():
    print(k, ":", ",".join(v))
 null : user1 
 Joe Bob : user2 ,user5 
 Sandra Sandy : user3 
 John Doe : user4 ,user6 ,user7 
输出:

from collections import defaultdict 

s = """user1 : null 
user2 : Joe Bob 
user3 : Sandra Sandy 
user4 : John Doe
user5 : Joe Bob 
user6 : John Doe 
user7 : John Doe"""

result = defaultdict(list)
for line in s.splitlines():                        #Iterate each line
    line = line.strip().split(":")                 #Split string by ":"
    result[line[1].strip()].append(line[0].strip())  #Create key-value

for k, v in result.items():
    print(k, ":", ",".join(v))
 null : user1 
 Joe Bob : user2 ,user5 
 Sandra Sandy : user3 
 John Doe : user4 ,user6 ,user7 

使用
re
itertools.groupby

import re
from itertools import groupby

data = '''user1 : null
user2 : Joe Bob
user3 : Sandra Sandy
user4 : John Doe
user5 : Joe Bob
user6 : John Doe
user7 : John Doe'''

for v, g in groupby(sorted(re.findall(r'(.*?)\s*:\s*(.*)', data), key=lambda k: k[1]), lambda k: k[1]):
    print('{}: '.format(v) + ', '.join(i[0] for i in g))
印刷品:

Joe Bob: user2, user5
John Doe: user4, user6, user7
Sandra Sandy: user3
null: user1

使用
re
itertools.groupby

import re
from itertools import groupby

data = '''user1 : null
user2 : Joe Bob
user3 : Sandra Sandy
user4 : John Doe
user5 : Joe Bob
user6 : John Doe
user7 : John Doe'''

for v, g in groupby(sorted(re.findall(r'(.*?)\s*:\s*(.*)', data), key=lambda k: k[1]), lambda k: k[1]):
    print('{}: '.format(v) + ', '.join(i[0] for i in g))
印刷品:

Joe Bob: user2, user5
John Doe: user4, user6, user7
Sandra Sandy: user3
null: user1

如果您熟悉
pandas
library,您可以使用更少的行(使用表格数据时)获得更大的灵活性:

输出:

Joe Bob :  user2, user5
John Doe :  user4, user6, user7
Sandra Sandy :  user3
null :  user1

如果您熟悉
pandas
library,您可以使用更少的行(使用表格数据时)获得更大的灵活性:

输出:

Joe Bob :  user2, user5
John Doe :  user4, user6, user7
Sandra Sandy :  user3
null :  user1

非常感谢你。虽然所有的解决方案都有效,但我觉得这对于其他人来说是最容易阅读的代码。非常感谢。虽然所有的解决方案都有效,但我觉得这对于其他查看代码的人来说是最容易阅读的。