如何将csv文件作为值添加到字典中

2024-09-27 21:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个字典dataset = dict(),并创建了一个列列表:

colums = ["date", "day", "month", "year", "cases", "deaths", "countriesAndTerritories","countryTerritoryId", "countryTerritoryCode", "population2019", "continent", "cumulativeper1000002Weeks"]

现在我把列作为键,我想要一个csv文件作为值。 代码如下:

dataset = dict()
for h in colums:
    dataset[h] = ""
print(dataset)

结果是:

{'date': '', 'day': '', 'month': '', 'year': '', 'cases': '', 'deaths': '', 'countriesAndTerritories': '', 'countryTerritoryId': '', 'countryTerritoryCode': '', 'population2019': '', 'continent': '', 'cumulativeper1000002Weeks': ''}

但是,我想将csv文件作为值放入字典中

for row in reader:
    dataset[h] = row
print(dataset)

{'date': '', 'day': '', 'month': '', 'year': '', 'cases': '', 'deaths': '', 'countriesAndTerritories': '', 'countryTerritoryId': '', 'countryTerritoryCode': '', 'population2019': '', 'continent': '', 'cumulativeper1000002Weeks': ['25/09/2020', '25', '9', '2020', '0', '0', 'Afghanistan', 'AF', 'AFG', '38041757', 'Asia', '1.57195684']}

我想发生的是{'date': '25/09/2020', 'day': '25', 'month': '9' ...... }

注:代码为

import csv
def read_dataset() -> List[Dict[str,str]]:
    with open('covid-19.csv', 'r') as file:
        reader = csv.reader(file)
        no_head = next(reader, None)
        colums = ["date", "day", "month", "year", "cases", "deaths", "countriesAndTerritories",
              "countryTerritoryId", "countryTerritoryCode", "population2019", "continent", "cumulativeper1000002Weeks"]
        dataset = dict()
        for h in colums:
            dataset[h] = ""
        for row in reader:
            dataset[h] = row
            return dataset
dataset = read_dataset()
print(dataset)

Tags: csvdateyeardatasetreaderdaycontinentcases
3条回答

从您发布的代码来看,不清楚您的文件是什么样子的。 假设它只有一行,比如

'25/09/2020','25','9','2020','0','0','Afghanistan','AF','AFG','38041757','Asia','1.57195684'

你可以这样做

colums = ["date", "day", "month", "year", "cases", "deaths", "countriesAndTerritories", "countryTerritoryId", "countryTerritoryCode", "population2019", "continent", "cumulativeper1000002Weeks"]

with open('untitled.txt', 'r') as file:
    fcontent = file.read().split(',')

for idx, c in enumerate(colums):
    dataset[c] = fcontent[idx]

我建议检查Python csv模块中可用的DictReader。我认为它可以自动地做你需要的事情,从而为你省去很多麻烦

我怀疑您的代码可能被改写为:

import csv
from typing import Dict, List, Iterable


def read_dataset(filename: str, custom_headers: Iterable[str] = None) -> List[Dict[str, str]]:
    with open(filename, 'r') as file:
        reader = csv.DictReader(file, fieldnames=custom_headers)
        return list(reader)

my_headers = [
    'date',
    'day',
    'month',
    'year',
    'cases',
    'deaths',
    'countriesAndTerritories',
    'countryTerritoryId',
    'countryTerritoryCode',
    'population2019',
    'continent',
    'cumulativeper1000002Weeks',
]

dataset = read_dataset('covid-19.csv', my_headers)
print(dataset)

免责声明:我没有尝试运行上述代码

这假设您正在读取的csv文件没有标题行,或者您希望使用自定义名称重命名字段

特定于您的案例的三行程序(需要python -m pip install requests),生成dict列表,每个dict都是您想要的格式的一行:

Try it online!

import io, csv, requests
bytes_data = requests.get('https://opendata.ecdc.europa.eu/covid19/casedistribution/csv').content
print(list(csv.DictReader(io.StringIO(bytes_data.decode('utf-8')), delimiter = ',')))

相关问题 更多 >

    热门问题