Добавление двух значений в виде массива в словаре - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь, чтобы пользователь ввел координаты x и y, которые затем будут сохранены в словаре 'p' в виде p = {0: [x, y], 1: [x, y], 2: [x, y], 3: [x, y]}.Однако я могу получить только значение x или значение y, сохраненное в словаре для каждой пары ключей.

p = {}
for i in range(4):
    while True:
        p_input = input("Enter starting point X,Y Coordinates:")
        p_components = p_input.split(',')
        if len(p_components) != 2:
            print("Missing coordinate please try again.")
            p_input = input("Enter starting point X,Y Coordinates:")
        else:
            p[i] = float(p_components[0])
            p[i] = float(p_components[1])
            break
print(p)

Для каждой пары ключ-значение, как я смогу хранить x иy значение в виде массива в части значения для каждого ключа?

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

Вы пытаетесь сохранить две преобразованные координаты в одном месте p[i], поэтому вы всегда добавляете только один поплавок в качестве элемента dict, а не список из двух поплавков.На самом деле, лучше использовать кортеж для координат (пара координат - это упорядоченная неоднородная последовательность, а кортеж потребляет меньше ОЗУ, чем список).

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

p = {}
for i in range(4):
    while True:
        p_input = input("Enter starting point X,Y Coordinates:")
        p_components = p_input.split(',')
        if len(p_components) != 2:
            print("Missing coordinate or too many coordinates, please try again.")
            continue
        try:
            x = float(p_components[0])
            y = float(p_components[1])
        except ValueError:
            print("Invalid coordinates", p_components, "please try again.")
        else:
            p[i] = (x, y)
            break
print(p)

демонстрационный вывод

Enter starting point X,Y Coordinates:1,2
Enter starting point X,Y Coordinates:3,4,5
Missing coordinate or too many coordinates, please try again.
Enter starting point X,Y Coordinates:3
Missing coordinate or too many coordinates, please try again.
Enter starting point X,Y Coordinates:a,b
Invalid coordinates ['a', 'b'] please try again.
Enter starting point X,Y Coordinates: 5  , 6
Enter starting point X,Y Coordinates:7,8
Enter starting point X,Y Coordinates:3,4
{0: (1.0, 2.0), 1: (5.0, 6.0), 2: (7.0, 8.0), 3: (3.0, 4.0)}
0 голосов
/ 11 мая 2018

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

p[i] = []
p[i].append(float(p_components[0]))
p[i].append(float(p_components[1]))

В качестве альтернативы просто сделайте:

p[i] = [float(p_components[0]), float(p_components[1])]

Но я бы порекомендовал просто использовать список вместо словаря, так что-то вроде:

p = []

for i in range(4):
    while True:
        p_input = input("Enter starting point X,Y Coordinates:")
        p_components = p_input.split(',')
        if len(p_components) != 2:
            print("Missing coordinate please try again.")
            # redundant to print input again here as it will automatically loop and ask again
        else:
            p.append([float(p_components[0]), float(p_components[1])])
            break
print(p)
0 голосов
/ 11 мая 2018

Это может помочь:

try:
    p[i] = [float(component) for component in p_components]
except:
    raise ValueError("INVALID_INPUT")
0 голосов
/ 11 мая 2018

Вы перезаписываете значение словаря, когда делаете:

p[i] = float(p_components[0])
p[i] = float(p_components[1])

Попробуйте вместо этого:

p[i] = [float(p_components[0]), float(p_components[1])]

Вы также можете немного уменьшить свой код, так как while является избыточным:

p = {}
for i in range(4):
    p_input = input("Enter starting point X,Y Coordinates:")
    p_components = p_input.split(',')
    if len(p_components) != 2:
        print("Missing coordinate please try again.")
        p_input = input("Enter starting point X,Y Coordinates:")
    else:
        p[i] = [float(p_components[0]), float(p_components[1])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...