2017-04-25 79 views
-1

我需要帮助我的代码。Python:使用一个整数和一个字符串作为键将嵌套列表转换为字典

我不得不作出这样一个嵌套列表:

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

我猜流浪括号。仔细查看错误消息,它会告诉你_where_语法错误被发现(但不是真正的错误所在)。 – alexis

+1

您在最后的代码片段 –

+0

@KindStranger中有太多密切的偏见''''谢谢。我有正确的括号,但现在我获得了另一种类型的错误 – killua

回答

1

这可能是你正在寻找:

numb = {(i,f): numbers[i][e] for i in range(len(numbers)) for e, f in enumerate(F)} 
+0

谢谢!很好的答案! – killua

+0

欢迎您:) – zipa

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) 
+0

我编辑了这个问题,但感谢您的回答和解释! – killua

相关问题