我正在尝试创建一些存储许多值的列表。每个列表在我的代码中都被称为类。我想在每个用户的字典中逐个添加每个键的值。
到目前为止,这是我的代码:
n = input('Enter the number of classe: ')
class_count = int(n)
listDict = {}
for i in range(1, class_count):
listDict["class_" + str(i)] = []
print(listDict)
输出
Enter the number of classe: 4
{'class_1': []}
{'class_1': [], 'class_2': []}
{'class_1': [], 'class_2': [], 'class_3': []}
答案 0 :(得分:1)
你需要迭代到class_count+1
,因为即使你开始1,它也不意味着range
函数将再迭代一次,它实际上只是迭代一个更少的时间。
另外,您应该使用OrderedDict
来保留类的顺序:
from collections import OrderedDict
listDict = OrderedDict()
class_count = 4
for i in range(1,class_count+1):
listDict["class_"+str(i)] = []
print listDict
>>>OrderedDict([('class_1', []), ('class_2', []), ('class_3', []), ('class_4', [])])
答案 1 :(得分:0)
你应该看看python的defaultdict
构造:
from collections import defaultdict
listDict = defaultdict(list)
然后,写下
listDict['class_{i}'.format(i=0)].append(value)
无需将listDict['class_{i}'.format(i=0)]
初始化为[]
答案 2 :(得分:0)
您可以为每个用户创建一个用户ID,将其用作键,然后将每个类值分配给该用户的列表,如下所示:
def generateuserid():
"""
generate user id for each user input
:return: userid
"""
for i in range(100):
yield 'user{}'.format(i)
# initiate generator
users = generateuserid()
n=input('Enter the number of classe: ')
listDict = {}
# for each user, retrieve next id
user = next(users)
for i in range(1,int(n)):
if user in listDict.keys():
listDict[user].append('class_{}'.format(i))
else:
listDict[user] = ['class_{}'.format(i)]
print(listDict) #{'user1': ['class_1', 'class_2', 'class_3', 'class_4', 'class_5', 'class_6', 'class_7', 'class_8', 'class_9']}