TypeError:字符串索引必须是整数,而不是dict - dict中的嵌套值

时间:2015-02-14 19:35:38

标签: python dictionary

我正在尝试在python dict中编写具有多个键和值的代码。例如,我的dict将如下所示:

d={"p1": {"d1":{"python":14,"Programming":15}}, "p2": {"d1":{"python":14,"Programming":15}} }

这里我有一个方法,如果某个特定值不存在,则填充字典。 代码如下所示:

Unable to add Value to python dictionary and write to a file

我修改了我的函数以接受1个参数。例如,我的参数是

在这种情况下如何更新字典?

我试过了:

FunDictr(d1)
#say the calling function passed 'foo'
#means d1 = foo

    with io.open("fileo.txt", "r", encoding="utf-8") as filei:
        d = dict()
        for line in filei:
            words = line.strip().split()
            for word in words:
                if word in d:
                    d[d1][word] += 1
                else:
                    d[d1][word] = 1

我期待看到{" foo":{" d1":{" python":14}}

当我写这篇文章时,我收到错误:

d[d1][word] += 1
TypeError: string indices must be integers, not dict

1 个答案:

答案 0 :(得分:1)

根据您提供的样本,看起来您正在寻找类似这样的东西。

def FunDictr(base_dictionary,string_key):
    d = dict()
    d[string_key] = dict()
    d[string_key]["d1"] = dict()
    with io.open("fileo.txt", "r", encoding="utf-8") as filei:   
        for line in filei:
            words = line.strip().split()
            for word in words:
                if word in d[string_key]["d1"]:
                    d[string_key]["d1"][word] += 1
                else:
                    d[string_key]["d1"][word] = 1

这将接受一个初始字典,使用传递给该函数的键添加一个新项,使用字符串d1的键创建一个嵌套字典作为该键的值,然后在其中创建一个包含该字符串的字典中的另一个字典字数。

出于好奇,额外的嵌套层的目的是什么?为什么不拍。

{'富' {'蟒':14}}

另外,我强烈建议使用更多描述性变量名称。它让生活更轻松:)