Python 写入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', '

我有三个列表,我需要写在一个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', '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更新了答案,反映出它对熊猫有依赖性。