Python 3.x 列表中的Python分组
我正在处理一个文本文件,我通过findall提取了我感兴趣的信息。然后,这些数据以如下字符串形式呈现给我: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
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
非常感谢你。虽然所有的解决方案都有效,但我觉得这对于其他人来说是最容易阅读的代码。非常感谢。虽然所有的解决方案都有效,但我觉得这对于其他查看代码的人来说是最容易阅读的。