簡體   English   中英

寫入txt文件時如何合並列表?

[英]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

使用 Pandas

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM