[英]how to combine a list when writing into a txt file?
我有三個列表,我需要將它們寫在一個 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"]
這就是我將腳本寫入 output 的方式
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))
我需要我的 output 像這樣打印
file=1 name=paul-smith-mei role=engineer
file=2 name=josh-kelly role=doctor
但我的 output 是
file=1 name=paul- role=engineer
file=1 name=smith- role=engineer
file=1 name=mei- role=engineer
使用簡單的迭代和dict.setdefault
前任:
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}')
寫入文件
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')
Output:
file=1 name=paul-smith-mei role=engineer
file=2 name=josh-kelly role=doctor
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'}]
df = pd.DataFrame(new_d)
for group_name, group in df.groupby(['file', 'role']):
name = "-".join(group['name'].values)
file = group_name[0].split("_")[0]
print (f"file={file} name={name} role={group_name[1]}")
您可以使用 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']))
創建一個單獨的字典並將其初始化為空然后遍歷數組中的每個索引並檢查文件是否相同然后連接名稱鍵
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.