我的代码需要帮助。
我有一个这样的嵌套列表:
numbers = [[4, 1, 1, 2, 3, 2], [2, 7, 3, 2, 7, 4], [1, 7, 4, 3, 3, 2]]
我还有一个字符串列表:
F = ["M", "O", "R", "V", "C", "P"]
我想在字典中转换列表频率。 我的代码是这样的:
numb = dict(((i,f), numbers[i][f]) for i in range(len(numbers)) for f in range(len(numbers[0])))
结果如下:
{(0, 1): 1, (1, 2): 3, (2, 4): 3, (0, 0): 4, (2, 0): 1, (2, 2): 4, (1, 4): 7, (1, 1): 7, (1, 5): 4, (1, 3): 2, (0, 5): 2, (2, 1): 7, (2, 5): 2, (0, 4): 3, (1, 0): 2, (2, 3): 3, (0, 3): 2, (0, 2): 1}
问题是我想在字典的键中使用列表F的字符串作为f。我希望:
{(0, "O"): 1, (1, "R"): 3, (2, "V"): 3, (0, "M"): 4, ... (0, "O"): 1}
我试图改变我的代码:
numb = dict(((i,f), numbers[i][f]) for i in range(len(numbers)) for f in F)
但我收到了TypeError: list indices must be integers, not str
有没有办法解决这个问题?提前谢谢!
答案 0 :(得分:1)
这可能是你想要的:
numb = {(i,f): numbers[i][e] for i in range(len(numbers)) for e, f in enumerate(F)}
答案 1 :(得分:1)
这里有两个问题,第一个问题是当你替换字符串列表(两个额外的)时你使用了太多的括号,所以语句的结尾应该是:
for f in F)
如果这样做,您将看到您不再有语法问题,但您会发现索引仍然存在问题,因为您尝试使用字符串作为索引。解决此问题的一种方法是使用索引方法从“F”
返回您正在使用的字母的位置两次更正都应该是:
numb = dict(((i,f), numbers[i][F.index(f)]) for i in range(len(numbers)) for f in F)