制作一个二维字典,您可以从中调用单个值

Making a two-dimensional dictionary you can call a single value from

我在这里和那里混淆了几个词,我的错。该示例应该使意图比到目前为止更清晰。

示例: 我有一个名为 "file.csv":

的 .csv 文件
T2Y;Brad;0001
K5;Jan;0002
T21;En;3838
T22;aps;3804
T11;Jyke;3957
T08;John;3825
K05;Tim;0001

当你像这样调用我的函数时:

>>> dict = function("file.csv")

您可以这样调用您要求的值:

>>> dict['Brad']['code']
'T2Y'
>>> dict['John']['name']
'John'

我似乎正确地做的是通过读取 .csv 文件创建第一个字典,但我无法创建可以按照我的示例所示方式调用的嵌套字典。我试着在下面的漫谈中更深入一点。

这是我目前的代码吐出信息的方式,可能是冗余信息

我当前的代码有点乱,因为我试图将它动态地形成一个嵌套字典,但此时它正在做的是打开并读取 .csv 文件,它用“;”分割行并通过使用名称作为键来创建可调用的每一行的字典。然而,当前的障碍是我只能用一个键、名称和它 returns 整个行作为字典或看起来像零件的东西来调用。像这样:

>>> dict = function("file.csv")
>>> dict['Brad']
'T2Y;Brad;0001\n'

如果我尝试在 name 键之后添加另一个键,代码将停止并显示错误代码:

TypeError: list indices must be integers or slices, not str

如上所述,这是一个非常简单的问题:您想使用 CSV 文件中的信息创建一个嵌套字典。由于您没有指定第 3 列是什么,我将把它标记为 id 并使用字符串。我还将假设该文件每个名称只包含一行:如果没有,将使用最新的一行。

import csv

user_info = {}
with open('data.txt') as csvfile:
    data = csv.reader(csvfile, delimiter=';')
    for code, name, id in data:
        user_info[name] = { 'code': code, 'name': name, 'id': id }

print (user_info)

这将打印:

{'En': {'id': '3838', 'code': 'T21', 'name': 'En'}, 'Tim': {'id': '0001', 'code': 'K05', 'name': 'Tim'}, 'Jan': {'id': '0002', 'code': 'K5', 'name': 'Jan'}, 'aps': {'id': '3804', 'code': 'T22', 'name': 'aps'}, 'John': {'id': '3825', 'code': 'T08', 'name': 'John'}, 'Jyke': {'id': '3957', 'code': 'T11', 'name': 'Jyke'}, 'Brad': {'id': '0001', 'code': 'T2Y', 'name': 'Brad'}}