迭代字典并根据键减去值

时间:2016-07-25 16:17:38

标签: python dictionary iteration

所以我有一个类似下面的字典,但是,我试图减去ART [0] [0] - ART [1] [0],这必须是一个迭代。

这就是我所拥有的,但它似乎不起作用。我一直收到错误:'KeyError:2'

任何帮助都将不胜感激。

   for i in range(1, 5): #from
      k = i
      for j in range (1, 5): #to
           if i == j:
              pass
           else:
               t = ART[j][0] - ART[i][0]
               g = ART[j][1] - ART[i][1] 

示例输入:

  <=> ART = {'U':( 5,6),'E':( 7,3),'A':( 3,3),'O':( 3,2),'I':   (1,4)}

3 个答案:

答案 0 :(得分:0)

通过密钥名称访问字典。有关示例,请参阅here

例如,ART['U']将返回(5, 6)。在您的代码中,您尝试访问密钥2,因为j等于2。但是,字典中没有名为echo json_encode($value); 的键。

答案 1 :(得分:0)

好像你想从字典中获取所有键的组合。字典是无序的,因此ART[0]没有任何含义 1)。相反,您可以直接迭代密钥:

for i in ART:
    for j in ART:
        if i != j:
            t = ART[j][0] - ART[i][0]
            g = ART[j][1] - ART[i][1]

或更短,使用itertools.product

for i, j in itertools.product(ART, repeat=2):
    if ...

1)除非你的词典中有一个键0,否则你没有。

答案 2 :(得分:0)

您在评论中提到要通过索引调用字典中的项目。这是不可能的,因为字典是无序的。字典用于映射特定的密钥&#39;到您针对该密钥存储的值。如果您print ART多次,您会看到不同的排序。我不认为你想要一本字典,我相信你已经选择了字母来制作钥匙,以便制作钥匙。

Python使用零索引。因此,如果您正在迭代,range(1, 5)会错过列表中的第一项。您希望for x in range(0, 5)获取列表中的所有元素,这些元素可以简单地写为for x in range(5)

最后,您的代码包含ijk(从未使用过),tg。这使得很多难以理解,特别是当Python为命名事物提供了如此大的灵活性时。

根据这些假设,我认为您需要一个元组列表作为您的数据结构:

ART = [(5, 6), (7, 3), (3, 3), (3, 2), (1, 4)]
for i, item in enumerate(ART):
    for j, pair_item in enumerate(ART):
        if i != j:
            t = item[0] - pair_item[0]
            g = item[1] - pair_item[1]