将 Python 列表和字典中的数据写入 CSV

Posted

技术标签:

【中文标题】将 Python 列表和字典中的数据写入 CSV【英文标题】:Writing data from a Python List and a Dictionary to CSV 【发布时间】:2021-05-04 02:44:26 【问题描述】:

假设 mydict 对于每个列表项都是唯一的:

 mylist = ['li1', 'li2']
 mydict =  'key1': 'value1','key2': 'value2','key3': 'value3

我想把这个结构写在一个CSV 文件中:

ListItem, key1, key2, key3
li1, value1, value2, value3
li2, value1, value2, value3

这是我如何尝试执行此操作的示例;但是我的代码每次迭代都会覆盖第一行,我不知道如何在第一列中编写列表项。请帮我一把好吗?

import pandas as pd
import random


def CreateDict(li):
    dict = 
    dict['x'] = random.randrange(1, li)  #25
    dict['y'] = random.randrange(1, li)  #27
    print(dict)
    return dict

mylist = [10, 20, 30]
for li in mylist:
    mydict = CreateDict(li)
    df = pd.DataFrame([mydict])
    df.to_csv('test.csv', index=False)

我得到这个作为输出:

x,y
25,27

【问题讨论】:

在 for 循环中,每次迭代都会覆盖数据框和 csv 文件。因此,数据框和 csv 文件将仅包含在循环的最后一次迭代中创建的 dict。 【参考方案1】:

让我们尝试 dict.fromkeys 生成数据字典,然后从这个 data 字典创建一个数据框并使用 DataFrame.to_csv 保存为 csv 文件:

data = dict.fromkeys(mylist, mydict)
pd.DataFrame(data).T.rename_axis('ListItem').to_csv('foo.csv')

编辑:如果您想在mylist 中为每个项目创建唯一的字典,您可以使用:

data = li:CreateDict(li) for li in mylist
pd.DataFrame(data).T.rename_axis('ListItem').to_csv('foo.csv')

# foo.csv

ListItem,key1,key2,key3
li1,value1,value2,value3
li2,value1,value2,value3

【讨论】:

谢谢,我在循环中使用了代码,但 CSV 文件中的字典值没有改变。 @Flodude 你不必在循环中使用代码 它可以工作,但它会重新运行 CreateDict 函数! @Flodude 你能详细说明一下re-run the CreateDict function吗?【参考方案2】:

处理现有解决方案:

import pandas as pd
import random


def CreateDict(li):
    dict = 
    dict['x'] = random.randrange(1, li)  #25
    dict['y'] = random.randrange(1, li)  #27
    print(dict)
    return dict

mylist = [10, 20, 30]
df=pd.DataFrame(columns=['x', 'y'])
for li in mylist:
    mydict = CreateDict(li)
    df=pd.concat([df, pd.DataFrame([mydict])])

df['mylist']=mylist
result=df[['mylist', 'x', 'y']]
result.to_csv('test.csv', index=False)

输出:

mylist  x  y
   10   6  3
   20   8  2
   30   7  4

【讨论】:

【参考方案3】:

首先,您应该在函数外部创建一个字典,在循环中添加项目并只在末尾写入。 使用您的代码,您正在编写 3 次相同的文件,并且您只看到最后一行。

对于索引,您应该设置 index=True。

这里是代码。希望能帮到你!

import pandas as pd
import random

my_dict = 
    'key1':[],
    'key2':[],
    'key3':[]


def AddToDict(li):
    my_dict['key1'].append(random.randrange(1, li))
    my_dict['key2'].append(random.randrange(1, li))
    my_dict['key3'].append(random.randrange(1, li))

mylist = [10, 20, 30]
for li in mylist:
    AddToDict(li)

df = pd.DataFrame(my_dict)  # Here
df.to_csv('test.csv', index=True)

【讨论】:

谢谢,第一行不写列表项。

以上是关于将 Python 列表和字典中的数据写入 CSV的主要内容,如果未能解决你的问题,请参考以下文章

将python字典写入CSV列:第一列的键,第二列的值

将列表字典中的每个值(列表)写入新行

Python将csv写入字典列表,其中标题作为键,行作为值

是否可以使用 pymssql 将 python 列表写入数据库?

将字典保存为 Python 脚本

python中,如何将列表中的一列数据和字典的key比较?