Python 写入txt文件时如何合并列表?
我有三个列表,我需要写在一个txt文件。我需要组合不同但具有相同“文件”和“角色”的“名称”Python 写入txt文件时如何合并列表?,python,list,Python,List,我有三个列表,我需要写在一个txt文件。我需要组合不同但具有相同“文件”和“角色”的“名称” new_d=[{'file': '1_2', 'name': 'paul', 'role': 'engineer'}, {'file': '2_3', 'name': 'josh', 'role': 'doctor'}, {'file': '1_2', 'name': 'smith', 'role': 'engineer'}, {'file': '1_2', '
new_d=[{'file': '1_2', 'name': 'paul', 'role': 'engineer'},
{'file': '2_3', 'name': 'josh', 'role': 'doctor'},
{'file': '1_2', 'name': 'smith', 'role': 'engineer'},
{'file': '1_2', 'name': 'mei', 'role': 'engineer'},
{'file': '2_3', 'name': 'kelly', 'role': 'doctor'},....]
file=[value.split("_")[0] for line in new_d for key,value in line.items() if key == "file"]
name=[value for line in new_d for key,value in line.items() if key == "name"]
role=[value for line in new_d for key,value in line.items() if key == "role"]
这就是我编写脚本以输出它的方式
for f,n,r in zip(file,name,role):
f.write('file={f} \t name={n} \t role={r}\n'.format(f=f,n=n,r=r))
我需要像这样打印输出
file=1 name=paul-smith-mei role=engineer
file=2 name=josh-kelly role=doctor
但我的输出是
file=1 name=paul- role=engineer
file=1 name=smith- role=engineer
file=1 name=mei- role=engineer
使用简单的迭代和
dict.setdefault
Ex:
new_d=[{'file': '1_2', 'name': 'paul', 'role': 'engineer'},
{'file': '2_3', 'name': 'josh', 'role': 'doctor'},
{'file': '1_2', 'name': 'smith', 'role': 'engineer'},
{'file': '1_2', 'name': 'mei', 'role': 'engineer'},
{'file': '2_3', 'name': 'kelly', 'role': 'doctor'}]
result = {}
for item in new_d:
f = item['file'].split("_")[0]
result.setdefault((item['role'], f), []).append(item['name'])
for (role, f), v in result.items():
print(f'file={f} \t name={"-".join(v)} \t role={role}')
file=1 name=paul-smith-mei role=engineer
file=2 name=josh-kelly role=doctor
写入文件
with open(filename, "w") as outfile:
for (role, f), v in result.items():
outfile.write(f'file={f} \t name={"-".join(v)} \t role={role}\n')
输出:
new_d=[{'file': '1_2', 'name': 'paul', 'role': 'engineer'},
{'file': '2_3', 'name': 'josh', 'role': 'doctor'},
{'file': '1_2', 'name': 'smith', 'role': 'engineer'},
{'file': '1_2', 'name': 'mei', 'role': 'engineer'},
{'file': '2_3', 'name': 'kelly', 'role': 'doctor'}]
result = {}
for item in new_d:
f = item['file'].split("_")[0]
result.setdefault((item['role'], f), []).append(item['name'])
for (role, f), v in result.items():
print(f'file={f} \t name={"-".join(v)} \t role={role}')
file=1 name=paul-smith-mei role=engineer
file=2 name=josh-kelly role=doctor
创建一个单独的字典并将其初始化为空 然后迭代数组中的每个索引并检查文件是否相同,然后使用Pandas连接名称键
您可以使用itertools中的
groupby
Itertools是python中的标准库
from itertools import groupby
for k,v in groupby(sorted(new_d, key=lambda x:x['file']), key=lambda x:x['file'].split('_')[0]+x['role']):
z=list(v)
print("file={} name={} role={}".format(z[0]['file'].split('_')[0], '-'.join([x['name'] for x in z]), z[0]['role']))
这个问题没有贴上熊猫的标签。“对于这样一个简单的任务,熊猫可能是杀伤力过大了。”SergeBallesta更新了答案,反映出它对熊猫有依赖性。