Застрял в отображении значений в словарях

#python #python-3.x #list #dictionary

#python #python-3.x #Список #словарь

Вопрос:

Я пишу код словаря, который просит этого пользователя ввести, сколько ключей и значений они хотят создать, но проблема в том, что мне удалось найти способ использовать пользовательский ввод, но теперь почему-то я застрял при отображении словаря.

Вот мой код словаря

 dictionary = {}

keys = int(input("How many keys u want? "))

value = int(input("How many values u want?"))

for i in range(keys):
    k = input("Key: ")
    for j in range(value):
        v = input("Value: ")
        dictionary[k] = v

 print(dictionary)
  

поэтому, когда я запускаю код программы, он выдает мне следующий результат, который отображает только 1 значение, хотя я ввел 2 значения.

Вывод

Но я хочу, чтобы вывод отображал каждое введенное мной значение, например, так

 { "Name" : ["David","Adam"],"Address" : ["101 street","102 street"] }
  

Комментарии:

1. На каждой итерации, когда вы вставляете значение в ключ, вы фактически заменяете значение, вставленное ранее. Чтобы исправить это, создайте каждое значение в виде списка и добавляйте к нему на каждой итерации, а когда все итерации выполнены — вставьте его в ключ.

2. Чтобы согласиться с комментарием @YossiLevi, большинство людей использовали бы a collections.defaultdict(list) для этого, чтобы упростить код для добавления первого элемента.

Ответ №1:

опубликует его также в качестве ответа, чтобы у вас был правильный код, и вам не нужно было с ним бороться:

 dictionary = {}

keys = int(input("How many keys u want? "))

value = int(input("How many values u want?"))

for i in range(keys):
    k = input("Key: ")
    values = []
    for j in range(value):
        v = input("Value: ")
        values.append(v)
    dictionary[k] = values

print(dictionary)
  

вывод:

 How many keys u want? 2
How many values u want?2
Key: a
Value: 1
Value: 2
Key: b
Value: 3
Value: 4
{'a': ['1', '2'], 'b': ['3', '4']}
  

Ответ №2:

Вот соответствующий код тому, что сказал @Yossi Levi:

 dictionary = {}

keys = int(input("How many keys u want? "))

value = int(input("How many values u want?"))


for i in range(keys):
    k = input("Key: ")
    val_list = []
    for j in range(value):
        v = input("Value: ")
        val_list.append(v)
    dictionary[k] = val_list

print(dictionary)
  

Ответ №3:

Глядя на то, что вы пытаетесь сделать, и просматривая некоторые комментарии, добавленные к вашему вопросу, похоже, что это сработает для вашего варианта использования:

 from collections import defaultdict
from pprint import pprint as pp

dictionary = defaultdict(list) # so every key maps to a list

keys = 2
values = 2

for i in range(keys):
    k = input("Key: ")
    for j in range(value):
        v = input("Value: ")
        dictionary[k].append(v)

pp(dictionary)