基于一列从CSV文件创建多个词典

2024-09-28 01:33:17 发布

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

我有一个包含以下记录的csv文件

language,1,english1
language,3,english3
language,4,english4
language,5,english5
language,6,english6
language,7,english7
gender,F,F
gender,female,F
gender,Female,F
gender,M,M
gender,male,M
gender,Male,M

我想创建字典,即基于第一列,比如说dictlanguage,dictgender,我想分别创建键对和值对

我要找的是:

dictlanguage = [{'3': 'english3', '4': 'english4', '5': 'english5', '6': 'english6', '7': 'english7'}]
dictgender = [{'F': 'F', 'female': 'F', 'Female': 'F', 'M': 'M', 'male': 'M', 'Male': 'M'}]

以上内容将帮助我使用适当的字典,并获取键/值。原始数据集是巨大的,所以我希望有单独的字典。我试过下面的代码,但我只有一本字典,有人能帮我吗

我无法基于column1为字典创建动态变量名,也无法使用干净/简单的代码获取多个字典

import csv

reader = csv.reader(open('c:\\sample.csv', newline='', encoding='utf8'))
# result = {}
for row in reader:
    # print(row)
    d2 = [{rows[1]: rows[2] for rows in reader}]
    print(d2)

这将打印以下输出:

[{'3': 'english3', '4': 'english4', '5': 'english5', '6': 'english6', '7': 'english7', 'F': 'F', 'female': 'F', 'Female': 'F', 'M': 'M', 'male': 'M', 'Male': 'M'}]

我想完成没有熊猫,如果可能的话,由于项目的限制。谢谢你在这方面的帮助


Tags: csv字典genderlanguagemalefemalereaderrows
3条回答

如上所述,在不使用任何库的情况下,一种方法可以是:

# d are your data a 2-d list
s = set([x[0] for x in d])
res = {k:dict([x[1:] for x in d if x[0] == k]) for k in s}

生成的字典字典使用作为二维列表第一个元素出现的不同名称进行键入,因此您只需使用以下内容即可获得不同的字典:

language_dict = res["language"]
gender_dict = res["gender"]

您可以这样做:

import csv


def split_data(reader: csv.reader) -> dict:
    dicts = {}
    for row in reader:
        name = f"dict{row[0]}"
        if name in dicts.keys():
            dicts[name][row[1]] = row[2]
        else:
            dicts[name] = {row[1]: row[2]}
    return dicts

reader = csv.reader(open('data.csv', newline='', encoding='utf8'))
data = split_data(reader)

# output

{'dictlanguage': {'1': 'english1',
  '3': 'english3',
  '4': 'english4',
  '5': 'english5',
  '6': 'english6',
  '7': 'english7'},
 'dictgender': {'F': 'F',
  'female': 'F',
  'Female': 'F',
  'M': 'M',
  'male': 'M',
  'Male': 'M'}}

您可以使用if语句来确定要编辑的词典。我还建议使用with关键字,以便文件在完成时关闭:

import csv

dict_language = {}
dict_gender = {}

with open('filename.csv') as f:
    reader = csv.reader(f)

    for d, key, val in reader:
        if d == 'language':
            dict_language[key] = val
        elif d == 'gender':
            dict_gender[key] = val

print(dict_language)
print(dict_gender)

{'1': 'english1', '3': 'english3', '4': 'english4', '5': 'english5', '6': 'english6', '7': 'english7'}
{'F': 'F', 'female': 'F', 'Female': 'F', 'M': 'M', 'male': 'M', 'Male': 'M'}

相关问题 更多 >

    热门问题