簡體   English   中英

使用多個字典在 python 中寫入 csv 文件

[英]using multiple dictionaries to write a csv file in python

例如,我有兩個字典:

dict1 = {1:[30], 2:[42]}

其中鍵是產品代碼,值是平均銷售額

dict2 = {"apple":1, "banana":2}

其中 key 是產品名稱,values 是產品密鑰。

我想寫一個 CSV 文件,這樣我就有:

產品名稱 產品代碼 平均銷售額
“蘋果” 1 30
“香蕉” 2 42

解決這個問題的最佳方法是什么?

這是您可以做到的一種方式。 我相信也有更好的方法。

import pandas as pd
dict2 = {"apple": 1, "banana": 2}
dict1 = {1: [30], 2: [42]}

df = pd.DataFrame(list(dict1.items()), columns=['product code','average sales'])
df['average sales'] = df['average sales'].str[0] #removing the square brackets
df2 = pd.DataFrame(list(dict2.items()), columns=['product name','xx'])
df3 = pd.concat([df,df2],axis=1).iloc[:, 0:3] #taking only the first 3 columns
print(df3)
df3.to_csv('file.csv', index=False)

有幾種方法可以正確地做到這一點。 我認為以下內容很有啟發性,尤其是如果您對 Pandas 不太熟悉的話。

d1 = {1:[30], 2:[42]}
d2 = {"apple":1, "banana":2}


def get_key(d, val):
    '''return key for any value'''
    for k, v in d.items():
        if val == v:
             return k
    return "key doesn't exist"


#Make a new dict containing all the columns you need
r = {'product name':[], 'product code':[],  'average sales':[]}

#Populate r
for k,v in d1.items():
    r['product code'].append(k)
    r['average sales'].append(*v) #* unpacks the list item
    r['product name'].append(get_key(d2, k))
    
#Make a DataFrame and export it
import pandas as pd
df = pd.DataFrame(r)
df.to_csv('your_file.csv', index=False)

可以合並字典,然后轉換成pandas dataframe,然后把dataframe寫成Z32719B5675AFFEE584

import pandas as pd
dict1 = {1:[30], 2:[42]}
dict2 = {"apple":1, "banana":2}

#merge dict1 and dict2 into dict3:
dict3 = {k: [v, dict1[v][0]] for k, v in dict2.items()}

#create pandas dataframe from dict3 and transpose it.
df = pd.DataFrame(dict3).transpose()

#wite dataframe to csv file
df.to_csv("new_file.csv", header=None)

這是生成的 new_file.csv:

apple,1,30
banana,2,42
import csv

dict1 = {1:[30], 2:[42]}
dict2 = {"apple":1, "banana":2}

# Final array, will be written to csv
data = []

for name, code in dict2:
    if code in dict:
        avg_sales = dict1[code][0]
        data += [name, code, avg_sales]
    # else key doesn't exist

with open('myfile.csv', 'w', newline='') as file:
    mywriter = csv.writer(file, delimiter=',')
    mywriter.writerow(["Product Name", "Product Code", "Average Sales"])   # Headers
    mywriter.writerows(data)    # Data

順便說一句,看起來你在 dict1 中的值是單個元素 arrays,所以我使用的是dict1[code][0] 如果您將其更改為僅 integer 值,它將只是dict1[code]

您可以遍歷 dict2 的鍵,通過使用來構建每一行

pd.DataFrame({'product name': k, 'product code': dict2[k], 'average sales': dict1[dict2[k]]})

在此處輸入圖像描述

和 append 它逐行到df。 解決方案代碼是

import pandas as pd
dict1 = {1:[30], 2:[42]}
dict2 = {"apple":1, "banana":2}

df = pd.DataFrame()   #empty df
for k in dict2:
    df = df.append(pd.DataFrame({'product name': k, 
                                 'product code': dict2[k], 
                                 'average sales': dict1[dict2[k]]  }))
df.to_csv('my_file.csv', index=False)

Output 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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