我在txt文件中列出了1000个名称。我已经标记了它们。现在,每个名称都在名称列表中分开。
names = ['name1','name2','name3','etc...']
我还有一个嵌套的字典,其中所有字母都作为键,并且包含一个以0到10(名称列表中名称的最大长度)开头的值的列表。每个元素对应于可以出现在名称中的每个字母位置。我已经按照以下步骤创建了它们:
dic = dict.fromkeys(string.ascii_lowercase,[v*0 for v in range(11)])
>>> {'a': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'b': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'c': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'd': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'e': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'f': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'g': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'h': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'i': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'j': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'k': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'l': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'm': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'n': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'o': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'p': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'q': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'r': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 's': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 't': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'u': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'v': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'w': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'x': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'y': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'z': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
因此,我创建了一个for循环来遍历名称列表中的名称。对于每个名称,我都使用了名称中的枚举函数,以便获取名称中每个字母的索引位置并获取相应的字母。 然后,我尝试将嵌套字典的值加1(以计算每个名称在该位置出现一个字母的次数),如下所示:
for name in names:
for idx,letter in enumerate(name):
dic[letter][idx] += 1
完成后,我遇到了问题。它不是在正确的位置计数和更新值。它正在更新所有元素。例如:
{'a': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'b': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'c': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'd': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'e': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'f': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'g': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'h': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'i': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'j': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'k': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'l': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'm': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'n': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'o': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'p': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'q': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'r': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 's': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 't': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'u': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'v': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'w': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'x': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'y': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0], 'z': [9, 8, 8, 8, 7, 7, 0, 0, 0, 0, 0]}
我已经尝试找到有关字典属性的文章,但是我找不到为什么发生这种情况。我发现的唯一解决方案是计算各个名称出现在所有名称中的次数。但这不能解决我的问题。有人可以帮我吗?