функция map (), получающая данные - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь получить специальный ввод от пользователя и затем сохранить его во что-то вроде словаря.Я имею в виду что-то вроде:

>>> id 1230

, и я хочу сохранить его в виде:

{"id":1230}

или

[(id,1230)]

моя проблема в том, что на самом деле есть две переменные, одна из которых является строкой, а другая является целым числом, поэтому каким-то образом я получаю строку от пользователя, затем первая и вторая части должны быть разделены и сохранены в одной из упомянутых форм,Я знаю, что это связано с функцией map (), и, возможно, также используется лямбда-выражение. Раз я использовал такой код, чтобы получить два целых числа:

x,y = map(int,input().split())

, но я действительно не знаю, каксделать это с помощью строки и целого числа.Большое спасибо

Ответы [ 6 ]

0 голосов
/ 28 сентября 2018

Вопрос о том, хотите ли вы сохранить данные как dict или список tuples, зависит от того, хотите ли вы перезаписать существующие значения пользователем или нет.Если вы сохраните значения в dict, то при вводе

id 1230
hi 16
id 99

будет получен словарь типа {"id": 99, "hi":16}, потому что второй ввод id перезаписывает первый.Подход со списком кортежей привел бы к [("id", 1230), ("hi", 16), ("id", 90)].

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

Dictподход

d = dict()
var = input('Enter input: ')
key, value = var.split()
d[key] = int(value)

Список подход

L = list()
var = input('Enter input: ')
key, value = var.split()
L.append((key, int(value)))
0 голосов
/ 28 сентября 2018
>>> i = "id"
>>> x = 1234
>>> out = {i:x}
>>> out
{'id': 1234}
>>> out = [(i,x)]
>>> out
[('id', 1234)]
>>> 
>>>
>>> 
>>> ix = input("--> ")

--> id 1234
>>> ix = ix.split()
>>> out = {ix[0]:int(ix[1])}    
>>> out
{'id': 1234}
>>> out = [(ix[0],int(ix[1]))]    
>>> out
[('id', 1234)]
>>> 

Или, может быть, будет работать функция:

>>> add = lambda x:{x.split()[0],int(x.split()[1])}
>>> out = add(input("--> "))
--> id 1234
>>> out
{1234, 'id'}
>>> 
0 голосов
/ 28 сентября 2018
d={}
user_input=input('input id and number separated by space')# 'id 1'
key_value_split=user_input.split(' ')
d[key_value_split[0]]=key_value_split[1] # for dict
print(d) # {'id': '1'}

Для кортежа

print(d.items()) # [('id', '1')]
0 голосов
/ 28 сентября 2018
usr_inpt = input("enter whatever you want to enter: ")
id, value = usr_inpt.split()
output = [(id,value)]

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

0 голосов
/ 28 сентября 2018

Вам не нужно map здесь.Вы можете использовать str.split для разделения по пробелам и затем явно создать словарь:

var = input('Enter input: ')  # 'id 1230'
key, value = var.split()
d = {key: int(value)}         # {'id': 1230}

Вы можете добавить несколько проверок, чтобы убедиться, что формат введен правильно, прежде чем приступить к созданию словаря:

while True:
    try:
        var = input('Enter input: ')  # 'id 1230'
        key, value = var.split()
        d = {key: int(value)}         # {'id': 1230}
        break
    except ValueError:
        print('Incorrect format supplied, type "id 1230" expected. Please try again.')
0 голосов
/ 28 сентября 2018

Вам нужно разделить ввод и сохранить его в словаре.

data = dict()
keyValue = input()
data[keyValue.split(' ')[0]) = keyValue.split(' ')[1]
...