[英]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.