Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How do i append into dict?
#1
for x in range(3):    
   patientlist = {}
   patientname =input('Enter new name: ')
   patientlist["Patient Name:"] = patientname
print(patientname)
The above code prompts for input 3 times but when the dict is printed out, only the last input value gets appended into the dict. How do i append all values into the dict? And also I need the values to be in random order when printed out.
Reply
#2
Why you want to use dict? Dict key can't be duplicated. Either your dict key should be updated for every patient name

I hope you can use list

def patient_names():
    patient_name = []
    no_of_patients = int(input("Please input number of patients"))
    count = 1
    while count <= no_of_patients :
        name = str(input("Please input the patient name: "))
        patient_name.append(name)
        count+=1
    for name in range(len(patient_name)):
        print(patient_name[name])
patient_names()
Reply
#3
I´m assuming you want to create a list instead of a dictionary, cause you named your dictionary patientlist which is a contradiction.

But let´s assume you want to use a dictionary you need to do it this way.
patients = {}
for x in range(3):
   patient_name = input('Enter new name: ')
   patients[patient_name] = patient_name
for key, value in patients.items():
    print(key, value)
But using the same content for key and the value is nonsense imho.

So let´s assume you want to create a list of your patient names, do it this way.
patients = []
for x in range(3):
   patient_name = input('Enter new name: ')
   patients.append(patient_name)
for name in patients:
    print(name)
Reply
#4
Alternative approach could be:

>>> patients = [input('Enter new patient name: ') for patient in range(3)]
Enter new patient name: Bob
Enter new patient name: Alice
Enter new patient name: Guido
>>> print(*patients, sep='\n')
Bob
Alice
Guido
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply
#5
(Aug-21-2019, 06:59 AM)perfringo Wrote: Alternative approach could be:

>>> patients = [input('Enter new patient name: ') for patient in range(3)]
Enter new patient name: Bob
Enter new patient name: Alice
Enter new patient name: Guido
>>> print(*patients, sep='\n')
Bob
Alice
Guido

Pretty coool.. what this * operator mean here?
Reply
#6
(Aug-22-2019, 04:24 AM)Malt Wrote: Pretty coool.. what this * operator mean here?

This is iterable unpacking (see PEP-448).
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply
#7
(Aug-22-2019, 04:24 AM)Malt Wrote:
(Aug-21-2019, 06:59 AM)perfringo Wrote: Alternative approach could be:

>>> patients = [input('Enter new patient name: ') for patient in range(3)]
Enter new patient name: Bob
Enter new patient name: Alice
Enter new patient name: Guido
>>> print(*patients, sep='\n')
Bob
Alice
Guido

Pretty coool.. what this * operator mean here?

The operator * separates the elements of a list by space.

There are different ways of printing the elements of a list. You can see in this program some of them:

patients = ['Bob', 'Alice', 'Guido', 'Janet', 'Pamela']
numbers = [1, 2, 3, 4, 5]


# Printing the list using a loop:
print("\n\nThese are the lists using a loop with elements printed in different lines:\n")
for x in range(len(patients)):
    print(patients[x])

print()

for x in range(len(numbers)):
    print(numbers[x])

# Printing the list using a loop:
print("\n\nThese are the same lists using a loop with elements printed in the same line:\n")
for x in range(len(patients)):
    print(patients[x], end=" ")

print()

for x in range(len(numbers)):
    print(numbers[x], end=" ")
    
# Printing the list without a loop, using
# the operator *, that separates the elements
# of the list by space:

print("\n\nThese are the same lists without a loop, using the operator *, that separates the elements of the list by space:\n")
print(*patients)
print()
print(*numbers)

# Printing the list without a loop, using
# the operator *, and sep operator with commas:

print("\n\nThese are the same lists without a loop, using the operator *, and sep operator with commas:\n") 
  
print(*patients, sep = ", ")
print()
print(*numbers, sep = ", ")
  
# Printing the list without a loop, using
# the operator *, and sep operator with new line:

print("\n\nThese are the same lists without a loop, using the operator *, and sep operator with new line:\n") 
  
print(*patients, sep = "\n")
print()
print(*numbers, sep = "\n")
And here the output explaining what has been done:

Output:
These are the lists using a loop with elements printed in different lines: Bob Alice Guido Janet Pamela 1 2 3 4 5 These are the same lists using a loop with elements printed in the same line: Bob Alice Guido Janet Pamela 1 2 3 4 5 These are the same lists without a loop, using the operator *, that separates the elements of the list by space: Bob Alice Guido Janet Pamela 1 2 3 4 5 These are the same lists without a loop, using the operator *, and sep operator with commas: Bob, Alice, Guido, Janet, Pamela 1, 2, 3, 4, 5 These are the same lists without a loop, using the operator *, and sep operator with new line: Bob Alice Guido Janet Pamela 1 2 3 4 5
I hope this could clarify this to you or somebody else.

newbieAuggie2019
newbieAuggie2019

"That's been one of my mantras - focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains."
Steve Jobs
Reply
#8
(Aug-22-2019, 05:54 AM)newbieAuggie2019 Wrote:
(Aug-22-2019, 04:24 AM)Malt Wrote:
(Aug-21-2019, 06:59 AM)perfringo Wrote: Alternative approach could be:
 >>> patients = [input('Enter new patient name: ') for patient in range(3)] Enter new patient name: Bob Enter new patient name: Alice Enter new patient name: Guido >>> print(*patients, sep='\n') Bob Alice Guido 
Pretty coool.. what this * operator mean here?
The operator * separates the elements of a list by space. There are different ways of printing the elements of a list. You can see in this program some of them:
patients = ['Bob', 'Alice', 'Guido', 'Janet', 'Pamela'] numbers = [1, 2, 3, 4, 5] # Printing the list using a loop: print("\n\nThese are the lists using a loop with elements printed in different lines:\n") for x in range(len(patients)): print(patients[x]) print() for x in range(len(numbers)): print(numbers[x]) # Printing the list using a loop: print("\n\nThese are the same lists using a loop with elements printed in the same line:\n") for x in range(len(patients)): print(patients[x], end=" ") print() for x in range(len(numbers)): print(numbers[x], end=" ") # Printing the list without a loop, using # the operator *, that separates the elements # of the list by space: print("\n\nThese are the same lists without a loop, using the operator *, that separates the elements of the list by space:\n") print(*patients) print() print(*numbers) # Printing the list without a loop, using # the operator *, and sep operator with commas: print("\n\nThese are the same lists without a loop, using the operator *, and sep operator with commas:\n") print(*patients, sep = ", ") print() print(*numbers, sep = ", ") # Printing the list without a loop, using # the operator *, and sep operator with new line: print("\n\nThese are the same lists without a loop, using the operator *, and sep operator with new line:\n") print(*patients, sep = "\n") print() print(*numbers, sep = "\n")
And here the output explaining what has been done:
Output:
These are the lists using a loop with elements printed in different lines: Bob Alice Guido Janet Pamela 1 2 3 4 5 These are the same lists using a loop with elements printed in the same line: Bob Alice Guido Janet Pamela 1 2 3 4 5 These are the same lists without a loop, using the operator *, that separates the elements of the list by space: Bob Alice Guido Janet Pamela 1 2 3 4 5 These are the same lists without a loop, using the operator *, and sep operator with commas: Bob, Alice, Guido, Janet, Pamela 1, 2, 3, 4, 5 These are the same lists without a loop, using the operator *, and sep operator with new line: Bob Alice Guido Janet Pamela 1 2 3 4 5
I hope this could clarify this to you or somebody else. newbieAuggie2019

cool stuff!!.. thanks much Dance
Reply
#9
(Aug-22-2019, 09:11 AM)Malt Wrote: cool stuff!!.. thanks much Dance

You're welcome! Big Grin
newbieAuggie2019

"That's been one of my mantras - focus and simplicity. Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it's worth it in the end because once you get there, you can move mountains."
Steve Jobs
Reply
#10
In Python you should never do this:

>>> patients = ['Bob', 'Alice', 'Guido', 'Janet', 'Pamela'] 
>>> for x in range(len(patients)):
...     print(patients[x])
In Python you should iterate directly over items:

>>> for patient in patients: 
...     print(patient) 
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Cant Append a word in a line to a list err "str obj has no attribute append Sutsro 2 2,570 Apr-22-2020, 01:01 PM
Last Post: deanhystad
  Sort a dict in dict cherry_cherry 4 73,051 Apr-08-2020, 12:25 PM
Last Post: perfringo

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020