首页 > 解决方案 > 将键值对存储为列表理解

问题描述

我有这个功能:


datapoints = 3
abc = ['a','b','c', ... 'z']
character = abc[:datapoints]

for n in character:
    values = int(askstring("Title", "Value: "))     # 1
    dat1= character.pop(0)                          # a
    dat2 = dat1 + "," + str(values)                 # a,1
    d = dat2.split(",")                             # [a,1]
    data = list((d, d))                             # [['a', '1']] 
    print(data)

不幸的是,每次循环后数据都会被覆盖,因此我得到了这个:


[['a', '1'],['a', '1']]
[['b', '2'],['b', '2']]
[['c', '3'],['c', '3']]

而不是这个:


[['A', 1],['B', 2]],['C', 3]] 

我也尝试过 list(zip(d, d)),但这根本没有帮助:

[('a', 'a'),('1', '1')]
[('b', 'b'),('2', '2')]
[('c', 'c'),('3', '3')]

感谢您的任何帮助

标签: python

解决方案


  1. 您的循环每次都覆盖dataand的值,您希望将其放在循环的开头和循环的中间。例子:ddata = []data.append(d)
data = []
for n in character:
    d = ...
    data.append(d)
  1. 您的循环正在从列表中弹出字符character 在列表中循环。您想要执行以下任一操作:
for n in character:
    dat1 = n

或者:

while character:
    dat1 = character.pop(0)

推荐阅读