【问题标题】:Building a FOR loop inside of a string that will be used to prompt the user for input在用于提示用户输入的字符串内构建 FOR 循环
【发布时间】:2019-11-26 12:12:27
【问题描述】:

我很难解决我认为应该是一个简单的问题。我有一个字典,它由一个键(表示选项 # 的整数)和一个值(表示选项描述的字符串)组成。我需要在输入函数内的单独一行上打印每个键值对。

file_codes = {2: 'iosFile',
              3: 'startup',
              4: 'running'}
host_ip = '10.10.10.10'
users_numeric_entry = int(input(f'Please pick a configuration to copy for: {host_ip}\n))

输入提示如下:

Please pick a configuration to copy for: 10.10.10.10

2 - iosFile
3 - startup
4 - running
: 

我觉得我需要创建一个 for 循环来遍历字典,但我很难想出代码来实现我想要的输出。

【问题讨论】:

  • 字典不是一个排序的结构,所以你可以考虑移动到一个列表并enumerate它。 (考虑到选项是顺序的......)
  • 我会支持@Tomerikoo 的观点。我在下面给出的答案会将正确的#s 与提示匹配,但不能保证顺序
  • @Tomerikoo,如果我的选项不连续怎么办?
  • 看看@pmackni 的回答
  • @Tomerikoo 字典从 3.6(实现细节)和 3.7(保证)开始订购

标签: python for-loop input


【解决方案1】:

我会先打印出来,然后提示:

print(f'Please pick a configuration to copy for: {host_ip}\n')
for k, v in file_codes.items():
    print(str(k) + ' - ' + v)
users_numeric_entry = int(input(':'))

如果您使用的是 python 2.x,那么字典不会被排序,并且不能保证它会按照您期望的顺序打印。在 python 3.6+ 中,它们是有序的。

【讨论】:

    【解决方案2】:

    我非常支持 Python 中的字符串格式化。我建议研究一下 ''.format() 选项的功能。

    for k, v in sorted(file_codes.items()):
          print('{} - {}'.format(k, v))
    

    【讨论】:

    • 就我个人而言,我更喜欢 balderman 解决方案的列表理解,但其中任何一个都可以解决问题。除了打印变量之外,我更喜欢 ''.format 方法来格式化字符串中的一些附加选项。
    • format 的大部分(如果不是全部)功能都存在于f-strings
    • 这只是大多数,不是全部。不久前,我对我正在处理的脚本进行了广泛的研究,发现format 选项中存在更好的控件,这些控件没有f-strings 等效项。对于一般用途,这些额外的控件可以被认为是利基,大多数格式都可以用其中任何一个来完成。我在编写脚本时往往有更多的利基需求,所以我通常更喜欢format
    • 我想稍微改变一下我之前的观点。 f-strings 确实提供了一些超过 format 的附加控件以及性能提升,因此 f-strings 总体上会稍好一些,尽管这可能更像是一个偏好问题,除非您要涵盖如此大量的文本它实际上会产生性能影响。
    • 同意你说的。我个人仍然坚持使用format,因为我相信我需要时间来习惯f-s,而且我也懒得在我的所有项目中进行更改:) 只是在我的评论中指出以供读者将来参考
    【解决方案3】:

    类似这样的:

    file_codes = {2: 'iosFile',
                  3: 'startup',
                  4: 'running'}
    host_ip = '10.10.10.10'
    menu = '\n'.join(['{} - {}'.format(k, v) for k, v in file_codes.items()])
    users_numeric_entry = int(input(f'Please pick a configuration to copy for: {host_ip}\n {menu}'))
    

    【讨论】:

      【解决方案4】:
      In [34]: file_codes = {2: 'iosFile', 
          ...:               3: 'startup', 
          ...:               4: 'running'}                                                                                                                                                                                                                                                                                          
      
      In [35]: for k,v in sorted(file_codes.items(), key=operator.itemgetter(0)): print(k, '-', v)                                                                                                                                                                                                                                  
      2 - iosFile
      3 - startup
      4 - running
      

      【讨论】:

        猜你喜欢
        • 2022-06-27
        • 1970-01-01
        • 2013-10-05
        • 2020-12-29
        • 1970-01-01
        • 2021-10-24
        • 2020-12-14
        • 1970-01-01
        • 2014-06-17
        相关资源
        最近更新 更多