如何在Python中将多个列表转换为字典列表?

6
我有一个程序,它接收两个数字并将它们相减,并告诉我们个位、十位和百位是否小于被减数,如果需要借位也会告诉我们。
a=2345
b=1266
o=[int(d) for d in str(a)]
a=[int(d) for d in str(a)]
b=[int(d) for d in str(b)]
x=len(a)
y=len(b)
i=1
state=[]
c=[]
for n in range(x):
    if a[x-i]<b[y-i]:
        a[x-i]+=10
        a[x-i-1]-=1
        state.append(True)
    else:
        state.append(False)
    i+=1
i=1    
for m in range(x):
    c.append(a[x-i]-b[y-i])
    i+=1
c=c[::-1]
print(o) #before borrow
print(a) #after borrow
print(b) #number to subtract
print(c) #result
print(state) #if borrowed

这是我的输出:

[2, 3, 4, 5]
[2, 2, 13, 15]
[1, 2, 6, 6]
[1, 0, 7, 9]
[False, False, False, False]

以下是我的问题: 1)我想将结果映射到每个位置的字典列表中,如下所示:

[{'initial_num': '5', 'after_borrow': '15', 'state': True, 'after_subtract': '9'},
{'initial_num': '4', 'after_borrow': '13', 'state': True, 'after_subtract': '7'}...]

我该如何做到这一点,以便我有4个字典的列表,每个字典对应一个特定的位置?

3
你的Python版本是多少?我的state[True, True, False, False],与你的不同。这很奇怪。我使用的是Python 3.7.3版本。 - Brian
我重新启动了内核并得到了正确的输出。很奇怪。我将编辑问题并删除第一部分。谢谢。 - adfgasda
你的问题是什么?你的代码表明你已经知道如何将对象附加到列表中。你知道如何创建字典吗? - MisterMiyagi
2个回答

3
您可以使用列表推导式将您感兴趣的列表压缩成字典。
l = [{'initial_num': x, 'after_borrow': y, 'state': z, 'after_subtract': k} for x, y, z, k in zip(o, a, state, c)]

0

这可以实现你想要的。

a=2345
b=1266
o=[int(d) for d in str(a)]
a=[int(d) for d in str(a)]
b=[int(d) for d in str(b)]
x = len(a)
y = len(b)
i=1
state=[]
c=[]
for n in range(x):
    if a[x-i] < b[y-i]:
        a[x-i] += 10
        a[x-i-1] -= 1
        state.append(True)
    else:
        state.append(False)
    i+=1
i=1    
for m in range(x):
    c.append(a[x-i]-b[y-i])
    i += 1
c=c[::-1]
print(o) #before borrow
print(a) #after borrow
print(b) #number to subtract
print(c) #result
print(state) #if borrowed

result = []
for i in range(len(o)):
    idx = len(o) - i - 1
    result.append({
        'initial_num': o[idx],
        'after_borrow': a[idx],
        'state': state[idx],
        'after_subtract': c[idx]
    })
print(result)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接