如何将从用户获取的多个值分配给存储在python中的字典中的单个键?

时间:2016-12-11 17:25:34

标签: python python-3.x dictionary

我正在尝试创建一些存储许多值的列表。每个列表在我的代码中都被称为类。我想在每个用户的字典中逐个添加每个键的值。

到目前为止,这是我的代码:

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': []}

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']}