【问题标题】:Dict operation in loop循环中的字典操作
【发布时间】:2018-07-30 22:18:38
【问题描述】:

我的字典如下:

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 必须是一个字典。

【问题讨论】:

  • k=[k for k in CA.keys()] - k 是一个列表 - 你认为k += 1 应该做什么?
  • 我不认为这些是dicts
  • 您正试图将k 加一,但k 不是int
  • 首先,k,i 是列表,你不能对它们 +=1。第二什么是CA?你是说A吗?第三,你还应该检查你没有除以 0
  • 我需要确保 i 在所有情况下都不等于 k。 K+=1 是我首先尝试的东西

标签: python arrays loops dictionary


【解决方案1】:

好的,我想我开始明白你的意思了。

我会说解决方案可能如下所示:

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% 确定这是您想要的结果。

【讨论】:

  • 实际上,您希望您的 dict 值是列表...所以我再次意识到我没有得到正确的东西。你在某个时候说l=1,所以你将一个int分配给l。你不能指望它在某个时候变成list。在输出中,您有一个矩阵。 M[i,j] 的公式是什么(我说的是数学,而不是 python)。一旦我们弄清楚了,我们就可以很容易地将它翻译成python。所以,请表达 M[i,j] = f(A, i, j)。 :-)
  • 有没有办法让我通过聊天或其他方式与您联系?
  • 你说得对,我的输出将以矩阵形式表示。至于 M[i,j],对于 A[1]、A[2]..A[7],我将是 1,2..7。 J 也将相同,除了 i=j(对角元素)的 m(i,j) 将为空。
  • 是的,我用 groupname=SO48887198 和 passwordname=SO48887198 创建了一个聊天密码
  • 我知道 0
猜你喜欢
  • 2019-09-02
  • 2022-11-17
  • 2018-04-09
  • 2020-02-10
  • 2016-12-29
  • 2021-05-23
相关资源
最近更新 更多