【问题标题】:map() function getting inputmap() 函数获取输入
【发布时间】:2018-09-28 13:04:01
【问题描述】:

我正在尝试从用户那里获取特殊输入,然后将其保存在字典之类的东西中。我想到的输入是这样的:

>>> id 1230

我希望它以以下形式保存:

{"id":1230}

[(id,1230)]

我的问题是实际上有两个变量,一个是字符串,另一个是整数,所以不知何故我从用户那里得到了一行,那么第一部分和第二部分应该分开并保存在一个我提到的表格。我知道它与 map() 函数有关,也许还使用了 lambda 表达式。曾经我使用这样的代码来获取两个整数:

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

但我真的不知道如何用字符串和整数来做到这一点。 非常感谢

【问题讨论】:

  • 您的意思是{"id":1230}{id:1230}
  • 你从哪里得到输入,打电话给inputmap 实际上并不适用于此。
  • @BlackThunder 我的意思是 {"id":1230}
  • @chepner 例如,如果你有两个数字:x,y = map(int,input().split()) 可以工作,现在我有一个字符串和一个整数
  • 是的,您不想将int 应用于调用split 产生的每个 项目,这使得map 不适用。

标签: python python-3.x function dictionary input


【解决方案1】:

关于您是将数据存储为dict 还是tuples 列表的问题取决于您是否希望用户覆盖现有值。如果将值存储在 dict 中,则

的输入
id 1230
hi 16
id 99

会产生一个像{"id": 99, "hi":16} 这样的字典,因为第二个输入id 会覆盖第一个。元组列表方法将产生[("id", 1230), ("hi", 16), ("id", 90)]

其他人已经建议了如何解析这些值,但为了完成,我也会将其添加到我的答案中。

字典方法

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)))

【讨论】:

  • @schwobaseggl 你完全正确,我在我的回答中编辑了它
【解决方案2】:

这里不需要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.')

【讨论】:

  • 请注意,如果用户没有提供预期的输入,这将忽略您需要提供的任何处理。
  • @jpp 非常感谢你,但我很想知道你写的代码可以压缩在 map() 中吗?
  • @FarzinNasiri 不! map 将相同的函数应用于迭代中的 每个 元素;你不想那样做。
  • @FarzinNasiri,我还添加了一些错误处理以确保提供正确的格式。
【解决方案3】:

您需要拆分输入并将其保存到字典中。

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

【讨论】:

  • split() 应该优先于 split(‘ ‘),因为它可以拆分任意数量的空白字符以及句柄标签。
【解决方案4】:
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')]

【讨论】:

    【解决方案5】:
    usr_inpt = input("enter whatever you want to enter: ")
    id, value = usr_inpt.split()
    output = [(id,value)]
    

    这会将您的输入格式化为tuple ...但我不推荐dictionary,因为每个键都必须是唯一的,如果您有来自用户的多个条目,您最终可能会覆盖以前输入的用户输入。

    【讨论】:

    • input 总是返回一个str;你不需要自己打电话给str
    • 感谢您的澄清 - 大多数情况下我为数字做 int(input()),我没想到字符串输入不需要它:-)
    【解决方案6】:
    >>> 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'}
    >>> 
    

    【讨论】:

      【解决方案7】:
      # Intiatlise value and id
      id=0
      value=''
      id,value=input().split()
      id=int(id)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-24
        • 2015-10-11
        • 1970-01-01
        • 1970-01-01
        • 2020-10-18
        • 1970-01-01
        • 2011-03-01
        • 2019-08-22
        相关资源
        最近更新 更多