字典条目未按预期工作,只有最后一个条目被插入-Python

时间:2019-02-08 21:46:12

标签: python dictionary

为此工作学习经验。我想出了以下3个想法

A)用户创建了一个配置文件,因此我有fname和lname的字典。

B)然后我随机生成一个userid,将其添加到列表中。该列表仅包含随机的用户ID,稍后我将使用该用户ID,例如:userid012,userid89

C)我在新词典中分配了A和B。输出看起来像这样:

used_id user3 个人资料{'lastname':'jon','firstname':'jme'}

问题:我只看到最后一个值用户ID和名称。如果我有两个以上的条目,则看不到第一个。有用的提示将非常有帮助。 谢谢。

import random

print('Enter choice 1-3:'),'\n'
print('', '1-Create new profile','\n',
      '2-Update existing profile','\n',
      '3-Delete a profile')

#global variables
choice=int(input())
user_directory={}


#Dictionary function that takes fst and lst name and puts in a dict:
def new_profile():
    new_profile={}
    fn=input('First name:')
    new_profile['firstname']=fn
    ln = input('Last name:')
    new_profile['lastname'] = ln

    for k,v in new_profile.items():
        new_profile[k]=v

        return new_profile

#Generates a random user id which we will assign to a user created above
def user_id():
    uid_list=[]
    user_id='user'+str(random.randint(0,101))

    uid_list.append(user_id)
    if(user_id in uid_list):
        uid_list.remove(user_id)
        user_id = 'user' + str(random.randint(0, 101))

        uid_list.append(user_id)
    return user_id

#This dictionary will have user id and associate created new_profile
def addToDict():
    #user_directory={} unable to use this making it global
    user_directory['used_id']=user_id()
    user_directory['profile']=new_profile()

    for key,value in user_directory.items():
        user_directory[key]=value

    return user_directory


if(choice==1):
  # myuser=addToDict() this appraoch did not work
   #addToDict>> adding it here will not get this option in while loop, put inside while
   while True:
        addToDict()
        print('Add another entry?')
        choice=input()
        #Put the line below to see if number increases
        print('Current', len(user_directory)-1)
        if(choice!='stop'):
          continue

        else:
            break

   for k,v in user_directory.items():
        print(k,v)

2 个答案:

答案 0 :(得分:1)

new_profile()最后一行中的缩进。 return在第一次迭代中运行。试试:

for k,v in new_profile.items():
    new_profile[k]=v

return new_profile

顺便说一句,您似乎并没有遵循Python中的大多数约定/标准。看一下this simple tutorial关于PEP(官方样式指南)的信息。这样,您可以编写外观更好的代码,我们可以更快地提供帮助:)

答案 1 :(得分:0)

您的代码包含几个错误。我只能猜测你想做什么。让我们从一个显而易见的例子开始:函数addToDict()应该应该向字典中添加一个新用户。

您通常希望拥有一本字典,该字典将user_id映射到个人资料:

def addUserToDict(user_dictionary, user_id, profile):
    user_directory[user_id] = profile

然后在下面的输入循环中,使用字典,新的用户ID和新的配置文件调用此函数。

第二个错误出现在user_id()中:您总是返回带有一个新元素和一个新的随机用户ID的列表。而且,您总是会丢弃第一个生成的用户ID,然后添加第二个。