CSV文件的词典列表

问题描述 投票:1回答:2

我有一个词典列表:

[   defaultdict(<class 'dict'>,
                {   'account_id': '',
                    'address': {   'address_country': 'ZM',
                                   'city': 'North Matthewland',
                                   'state': 'Nevada',
                                   'street_name': 'Cabrera Extensions',
                                   'street_number': 197,
                                   'zip_code': '81431'},
                    'affiliate_id': 12,
                    'brand': 'TTT',
                    'country': 'ZM',
                    'email': '[email protected]',
                    'first_name': 'Peter',
                    'last_name': 'Green',
                    'leadsource': 559,
                    'password': 'test385',
                    'phone_number': '052839601'},)]

在我的情况下,我需要将所有这些数据都放到CSV文件中,所以通过csv模块,我尝试将所有这些数据写入CSV文件但我每次收到错误消息:

ValueError: dict contains fields not in fieldnames: 'address' 

所以我添加到'fieldnames'地址,但问题是我在一列地址中收到所有数据。

with open('test_file.csv', 'w') as csvfile:
    filed_names = ['first_name',
                   'last_name',
                   'email',
                   'phone_number',
                   'password',
                   'country',
                   'leadsource',
                   'affiliate_id',
                   'account_id',
                   'brand',
                   'street_number',
                   'street_name',
                   'city',
                   'state',
                   'address_country',
                   'zip_code',
                   ]
    writer = csv.DictWriter(csvfile, fieldnames=filed_names)
    writer.writeheader()
    writer.writerows(list_user_details)
python csv dictionary
2个回答
0
投票

熊猫提供了一个方便的选择:

# first flatten address
for d in lst:
    d.update(d['address'])
    del d['address']

# read into dataframe
df = pd.DataFrame(d, index=range(len(lst)))

# output to csv
df.to_csv('file.csv', index=False)

# Result
#   account_id address_country  affiliate_id brand               city country  \
# 0                         ZM            12   TTT  North Matthewland      ZM   

#                  email first_name last_name  leadsource password phone_number  \
# 0  [email protected]      Peter     Green         559  test385    052839601   

#     state         street_name  street_number zip_code  
# 0  Nevada  Cabrera Extensions            197    81431 

1
投票

您需要将结构展平,因此它只是一个包含字符串和数字的字典列表,而不是包含字符串和数字字典的字典列表。

假设您不想仅为写入步骤修改此列表,请创建一个新的空列表。将字典从一个列表复制到另一个列表,但将address字典转换为一组名为address.address_countryaddress.cityaddress.state等的附加字段。

然后使用csv写出这个新列表,并将修改后的字段名传递给它。

另外不要忘记在字段字符串中使用逗号进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.