繁体   English   中英

如何将 csv 文件作为字典读取,以便键是元组

[英]How can I read a csv file as a dictionary such that the keys are tuples

我有一个 csv 文件,我正在尝试读取它以使键成为一个元组。 我对该语言比较陌生,我熟悉的唯一其他语言是 C。 这是 csv 文件:

name,ABC,DEF,GHI
Alan,2,8,3
Barry,4,1,5
Collin,3,2,5

我想要的字典是:

{
    (2,8,3):"Alan"
    (4,1,5):"Barry"
    (3,2,5):"Collin"
}

这是我现在拥有的代码。 它被窃听了,因为我试图将密钥存储为列表而不是元组。 但是,我不太确定如何更改它。 任何帮助都会非常棒。

dictionary = {}
with open(argv[1], "r") as file:
    reader1 = csv.DictReader(file)
    for row in reader1:
        key = row[1:]
        dictionary[key] = row[0]

利用:

dictionary = {}
with open(argv[1], "r") as f:
    reader = csv.reader(f)
    next(reader) # skip header
    for line in reader:
        dictionary[tuple(map(int, line[1:]))] = line[0]

    print(dictionary)

这打印:

{(2, 8, 3): 'Alan', (4, 1, 5): 'Barry', (3, 2, 5): 'Collin'}

csv.DictReader的文档中:

创建一个 object,它的操作类似于常规阅读器,但将每行中的信息映射到一个字典,其键由可选的 fieldnames 参数给出。

DictReader将 map 您的行写入字典。 您目前正在做的是使用row[1:]切片字典,这将不起作用并给您一个TypeError: unhashable type: 'slice'异常。

相反,您可以使用tuple生成器表达式过滤所有没有name键的项目。 然后,您可以简单地将其用作键并将值设置为name

import csv

dictionary = {}
with open(argv[1], "r") as file:
    reader1 = csv.DictReader(file)
    for row in reader1:
        rows = tuple(int(v) for k, v in row.items() if k != "name")
        dictionary[rows] = row["name"]

print(dictionary)

Output:

{(2, 8, 3): 'Alan', (4, 1, 5): 'Barry', (3, 2, 5): 'Collin'}

利用:

将 pandas 导入为 pd Csv=pd.read_csv('somecsvfile.csv')

Dictcsv=Csv.to_dict()

你的字典准备好了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM