迭代通过字典和减去基于密钥的值
所以我有一个像下面的字典,但是,我试图减去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)}
看起来你想要从字典中获得所有键的组合。字典是无序的,所以ART[0]
没有任何意义1)。使用itertools.product
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]
或更短,:相反,您可以直接遍历键
for i, j in itertools.product(ART, repeat=2):
if ...
1)除非你有你的字典中的关键0
,你不要“T。
您在评论中提到您想通过索引调用词典中的项目。这是不可能的,因为字典是无序的。字典用于将特定的“键”映射到您针对该键存储的值。如果你print ART
几次,你会看到不同的顺序。我不认为你想在这里找到字典,我相信你已经选择了字母来制作钥匙,以便制作钥匙。
Python使用零索引。因此,如果您正在迭代,range(1, 5)
将错过列表中的第一项。你会想要for x in range(0, 5)
获得列表中的所有元素,它可以简写为for x in range(5)
。
最后,您的代码有i
,j
,k
(从未使用),t
和g
。这使得的难以理解,特别是当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]
请注意,这可能不适用于所有情况。考虑一个像[(1,2),(3,4),(1,2)]'的列表。 OP正在检查指数是否不同,所以他可能会想要处理'(1,2),(1,2)'对,但是你的将会跳过它。也许用'enumerate'来获取和比较索引? –
@tobias_k通知并做出相应更改。谢谢。 – roganjosh
您还没有表现出您期望的结果 –
缩进你展示else块?因为这是错误的。缩进它下面的行 –
我需要减去基于键的两个值,所以我的预期输出是t = 3和g = -3 –