Python 获取输入的map()函数
我正在尝试从用户那里获取一个特殊的输入,然后将其保存在类似字典的东西中。我脑海中的输入是这样的:Python 获取输入的map()函数,python,python-3.x,function,dictionary,input,Python,Python 3.x,Function,Dictionary,Input,我正在尝试从用户那里获取一个特殊的输入,然后将其保存在类似字典的东西中。我脑海中的输入是这样的: >>> id 1230 我希望它以以下形式保存: {"id":1230} 或 我的问题是实际上有两个变量,一个是字符串,另一个是整数,所以我从用户那里得到了一行,然后第一部分和第二部分应该分开并保存在我提到的其中一种形式中。我知道这与map()函数有关,可能还使用了lambda表达式。有一次,我使用这样的代码得到了两个整数: x,y = map(int,input().spli
>>> id 1230
我希望它以以下形式保存:
{"id":1230}
或
我的问题是实际上有两个变量,一个是字符串,另一个是整数,所以我从用户那里得到了一行,然后第一部分和第二部分应该分开并保存在我提到的其中一种形式中。我知道这与map()函数有关,可能还使用了lambda表达式。有一次,我使用这样的代码得到了两个整数:
x,y = map(int,input().split())
但我真的不知道如何使用字符串和整数。
非常感谢您需要拆分输入并将其保存到字典中
data = dict()
keyValue = input()
data[keyValue.split(' ')[0]) = keyValue.split(' ')[1]
这里不需要
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.')
这会将您的输入格式化为元组
…但我不建议使用字典
,因为每个键都必须是唯一的,如果您有来自用户的多个条目,则可能会覆盖以前输入的用户输入
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')]
或者一个函数可能会起作用:
>>> add = lambda x:{x.split()[0],int(x.split()[1])}
>>> out = add(input("--> "))
--> id 1234
>>> out
{1234, 'id'}
>>>
关于是否将数据存储为
dict
或元组列表的问题取决于您是否希望用户覆盖现有值。如果将值存储在dict
中,则
id 1230
hi 16
id 99
将生成一个类似于{“id”:99,“hi”:16}
的字典,因为第二个输入id
覆盖了第一个输入。元组列表方法将产生[(“id”,1230),(“hi”,16),(“id”,90)]
其他人已经提出了如何解析这些值的建议,但为了完成,我还将把它添加到我的答案中
听写法
列表法
您的意思是{id:1230}
或{id:1230}
?您从哪里获得输入,调用input
<代码>映射
实际上并不适用于这里。@BlackThunder我的意思是{“id”:1230}@chepner例如,如果你有两个数字:x,y=map(int,input().split())可以工作,现在我有了一个字符串和一个整数,您不想将int
应用于调用split
产生的每个项目,这一事实使得map
不适用。请注意,如果用户不提供预期的输入,这会忽略您需要提供的任何处理。@jpp非常感谢,但我很想知道你写的代码能在map()中压缩吗?@FarzinNasiri不<代码>映射对iterable中的每个元素应用相同的函数;您不想这样做。@FarzinNasiri,我还添加了一些错误处理,以确保提供正确的格式。input
始终返回一个str
;你不需要自己调用str
。感谢你的澄清-我主要是int(input())
数字,我没有想到字符串输入不需要它:-@schwobasegll你完全正确,我在回答中编辑了它split()
应该比split(“”)更可取
,因为它可以在任意数量的空白字符以及句柄选项卡上拆分。
>>> 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'}
>>>
id 1230
hi 16
id 99
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)))
# Intiatlise value and id
id=0
value=''
id,value=input().split()
id=int(id)