2016-01-13 113 views
1

我有字典A和列表B。 A的键实际上是xy,它们定义了位置,而A的值是B中对象的索引。如何获取字典中的键和值,如果键和值是元组

A = {(9, 10): (0, 2, 3), (2, 5): (6, 4, 1), (3, 7): (5, 7, 1)} 
B = ['cat', 'fish', 'snack', 'duck', 'mouse', 'pig', 'bird', 'rabbit'] 

我想打印该点(9,10)有对象在B索引[0][2][3]

(9,10) : cat, snack, duck 
(2,5) : bird,mouse,fish 
(3,7) : pig, rabbit,fish 
+1

什么问题?只需获取索引并将值从列表中拉出即可。不过,您可能会发现将值存储在值元组中更容易,而不是打扰列表和索引间接。 – pvg

+0

打印的位置'(9,0)',当我使用A.keys(0)是错误的...,我不知道从值'(0,2,3)得到0' –

+0

你是什么试图通过使用键来完成?你想获得A的第0个元素吗?这是一个字典,它没有一个明确的顺序。 – pvg

回答

5

创建具有索引和相应的值作为字典的映射,这样

mapping = {idx: item for idx, item in enumerate(B)} 

或简单地

mapping = dict(enumerate(B)) 

,那么你可以简单地从mapping挑选相应的值,这样

for key, values in A.iteritems(): 
    print("{}: {}".format(key, ", ".join(mapping[value] for value in values))) 

输出

(9, 10): cat, snack, duck 
(3, 7): pig, rabbit, fish 
(2, 5): bird, mouse, fish 
0

,您可以访问字典的元组。然后,您可以使用返回的索引生成一个新列表。

print [B[location] for location in A[(9, 10)]] 

# ['cat', 'snack', 'duck']