중첩 된 사전의 데이터로 채워진 CSV 파일을 만들어야합니다.
이 질문을 참조하고 있습니다 : Convert Nested Dictionary to CSV Table .
이 문제를 확인했습니다 : From Nested Dictionary to CSV File , 그리고 쉼표로 구분 된 값을 만드는 방법을 찾았습니다.
내 중첩 된 사전은 다음과 같습니다.
users_item = {
"Angelica": {
"Blues Traveler": 3.5,
"Broken Bells": 2.0,
"Norah Jones": 4.5,
"Phoenix": 5.0,
"Slightly Stoopid": 1.5,
"The Strokes": 2.5,
"Vampire Weekend": 2.0
},
"Bill":{
"Blues Traveler": 2.0,
"Broken Bells": 3.5,
"Deadmau5": 4.0,
"Phoenix": 2.0,
"Slightly Stoopid": 3.5,
"Vampire Weekend": 3.0}
}
with open('output1.csv', 'w') as csv_file:
csvwriter = csv.writer(csv_file, delimiter=',')
for session in users_item:
for item in users_item[session]:
csvwriter.writerow([session, item, users_item[session][item]])
이 출력을 생성했습니다.
Angelica,Blues Traveler,3.5
Angelica,Broken Bells,2.0
Angelica,Norah Jones,4.5
Angelica,Phoenix,5.0
Angelica,Slightly Stoopid,1.5
Angelica,The Strokes,2.5
Angelica,Vampire Weekend,2.0
Bill,Blues Traveler,2.0
Bill,Broken Bells,3.5
Bill,Deadmau5,4.0
Bill,Phoenix,2.0
Bill,Slightly Stoopid,3.5
Bill,Vampire Weekend,3.0
그러나 다음 형식으로 출력을 생성해야합니다.
Angelica,Blues Traveler,3.5,Broken Bells,2.0,Norah Jones,4.5,Phoenix,5.0,Slightly Stoopid,1.5,The Strokes,2.5,Vampire Weekend,2.0
Bill,Blues Traveler,2.0,Broken Bells,3.5,Deadmau5,4.0,Phoenix,2.0,Slightly Stoopid,3.5,Vampire Weekend,3.0
위에서 보여준 출력을 얻기 위해 코드를 수정하는 방법을 알려주시겠습니까?
당신은 아주 가깝습니다. 을 사용하여 내부 사전 항목을 목록으로 병합 itertools.chain.from_iterable
한 다음 사용자 이름과 결합하고 목록을 CSV 파일에 씁니다.
수정 된 코드 :
from csv import writer
from itertools import chain
users_item = {
"Angelica": {
"Blues Traveler": 3.5,
"Broken Bells": 2.0,
"Norah Jones": 4.5,
"Phoenix": 5.0,
"Slightly Stoopid": 1.5,
"The Strokes": 2.5,
"Vampire Weekend": 2.0,
},
"Bill": {
"Blues Traveler": 2.0,
"Broken Bells": 3.5,
"Deadmau5": 4.0,
"Phoenix": 2.0,
"Slightly Stoopid": 3.5,
"Vampire Weekend": 3.0,
},
}
with open("output.csv", mode="w", newline='') as f:
writer = writer(f)
for user, items in users_item.items():
flattened_items = list(chain.from_iterable(items.items()))
writer.writerow([user, *flattened_items])
또는 목록 이해력을 사용하여 병합 :
with open("output.csv", mode="w", newline="") as f:
writer = writer(f)
for user, items in users_item.items():
row = [item for kvp in items.items() for item in kvp]
writer.writerow([user, *row])
또는 키 값 쌍을 한 번에 하나씩 목록으로 확장하는 더 간단한 방법 :
with open("output.csv", mode="w", newline="") as f:
writer = writer(f)
for user, items in users_item.items():
row = [user]
for k, v in items.items():
row.extend([k, v])
writer.writerow(row)
output.csv
Angelica,Blues Traveler,3.5,Broken Bells,2.0,Norah Jones,4.5,Phoenix,5.0,Slightly Stoopid,1.5,The Strokes,2.5,Vampire Weekend,2.0
Bill,Blues Traveler,2.0,Broken Bells,3.5,Deadmau5,4.0,Phoenix,2.0,Slightly Stoopid,3.5,Vampire Weekend,3.0
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다