循环中的Dict操作

时间:2018-02-20 14:11:24

标签: python arrays loops dictionary

我有一个字典如下:

A[1]
Out[351]: [0, 4, 5, 6]
A[2]
Out[352]: [1, 25, 8, 4]

高达:

A[7]
Out[352]: [0, 3, 6, 9]

鉴于这些,我必须使用以下条件填充另一个字典:

if A[1][0] <= A[2][0]:
    l=1
else:
    l=A[2][0]-A[1][2]/((A[1][1]-A[1][2])-(A[2][1]-A[2][0]))

给出:

l
Out[354]: 1

类似地:

if A[1][0] <= A[3][0]:
    l=1
else:
    l=A[3][0]-A[1][2]/((A[1][1]-A[1][2])-(A[3][1]-A[3][0]))
 if A[1][0] <= A[4][0]:
    l=1
else:
    l=A[4][0]-A[1][2]/((A[1][1]-A[1][2])-(A[4][1]-A[4][0]))

高达:

    if A[1][0] <= A[7][0]:
        l=1
    else:
       l=A[7][0]-A[1][2]/((A[1][1]-A[1][2])-(A[7][1]-A[7][0]))

如果我追加这些,我应该得到:

l
Out[360]: [1, 1, 1, 1, 1, 1, 1]

我希望l成为一个词典:

{1: [1, 1, 1, 1, 1, 1, 1]}

表示A1和

{2: [some values]}

表示A2..upto

{7: [some values]}

代表A7。

一个问题是我必须从A [1] [0],A [2] [0]到A [1] [0],A [7] [0]开始计算,然后是A [2 ] [0],A [1] A [0] ......依此类推至A [7] [0],A [6] [0]。另一个问题是我需要在比较A [i] [0]和A [i] [0]的任何地方跳过计算。我最初尝试过这样的循环:

i=[i for i in A.keys()]
k=[k for k in A.keys()]
while i != k:
        if A[i][0] <= A[k][0]:
             B=1
        else:
             B=A[k][0]-A[i][2]/((A[i][1]-A[i][2])-(A[k][1]-A[k][0]))

k +=1
i +=1

我收到此错误:

  File "<ipython-input-350-9d9e2d0e5d59>", line 8, in <module>
    k +=1

TypeError: 'int' object is not iterable

请有人帮我解决问题。请注意,B必须是dict。

1 个答案:

答案 0 :(得分:0)

好的,我想我已经开始理解你的事了。

我会说解决方案看起来像这样:

A = [
    [0, 4, 5, 6],
    [1, 25, 8, 4],
    [0, 3, 6, 9],
]

D = {i: 1 if A[1][0] <= A[i][0] else A[i][0]-A[1][2]/((A[1][1]-A[1][2])-(A[i][1]-A[i][0])) for i in range(len(A))}

print D
# {0: 0, 1: 1, 2: 0}

我会写一些关于我在这里做什么的细节。但首先,我并不是100%肯定这就是你想要的结果。