【问题标题】:How to print out values from two keys?如何从两个键中打印出值?
【发布时间】:2018-10-25 13:06:56
【问题描述】:

所以我很难打印出我创建的列表中的两个值。

基本上我做了一个列表:

[
  {
    'Numbers': '1',
    'Name': 'Hello'
  },
  {
    'Numbers': '2',
    'Name': 'There'
  },
  {
    'Numbers': '3',
    'Name': 'Stack'
  },
  {
    'Numbers': '4',
    'Name': 'OVerflow'
  }
]

现在如果我基本上调用那个函数是

names_number()

它会给我这样的价值观。

所以当然你会使用一个 for 循环,它会为自己打印每个循环,所以在这种情况下,循环看起来像:

对于names_number() 中的i: 打印(一)

这会给我:

{'Numbers': '1', 'Name': 'Hello'}
{'Numbers': '2', 'Name': 'There'}
{'Numbers': '3', 'Name': 'Stack'}

现在的问题是我只想打印出来

1 Hello
2 There
3 Stack

而且我不知道在这种情况下我将如何在每次 for 循环时只打印出每一个的值。我将不胜感激任何提示或解决方案,让我可以继续按照我希望的方式进行输出

【问题讨论】:

  • 您有相同的keys,所以只需遍历列表并继续打印值

标签: python list loops key-value-store


【解决方案1】:

print 的默认分隔符是单个空格,因此您使用简单的 for 循环:

for d in L:
    print(d['Numbers'], d['Name'])

或者使用 f 字符串(Python 3.6+):

for d in L:
    print(f"{d['Numbers']} {d['Name']}")

这是一个复杂的函数式解决方案:

from operator import itemgetter

fields = ('Numbers', 'Name')
print(*(f'{num} {name}' for num, name in map(itemgetter(*fields), L)), sep='\n')

1 Hello
2 There
3 Stack
4 OVerflow

【讨论】:

  • @Idlehands,哈,但你会在这个过程中学到一点…… f-strings、序列解包、生成器理解、mapitemgettersep 参数: D
  • 毫无疑问!不知道itemgetter,现在我再看一遍,一个不使用循环或列表理解的疯狂解决方案背后有某种美(如果你消除fields,这几乎可以在一行中完成)跨度>
  • 我使用了 f-string。这是最容易理解的。我完全忘记了我也可以使用列表中的 d['Numbers'] ,这完全被我错过了!但我真的很喜欢你如何“过度杀戮”最后一步。如果你能多解释一下就好了,因为它对我来说完全失去了! @jpp
【解决方案2】:

怎么样:

for dct in lst:
  print('{} {}'.format(dct['Numbers'], dct['Name']))

产生所需的:

1 Hello
2 There
3 Stack
4 OVerflow

请注意,如果您不关心项目的顺序(1 HelloHello 1),或者如果您使用的是 Python 3.6+,则可以使用更优雅的:

for dct in lst:
  print('{} {}'.format(*dct.values()))

【讨论】:

    【解决方案3】:

    我可能会这样做:

    item_list = [
      {
        'Numbers': '1',
        'Name': 'Hello'
      },
      {
        'Numbers': '2',
        'Name': 'There'
      },
      {
        'Numbers': '3',
        'Name': 'Stack'
      },
      {
        'Numbers': '4',
        'Name': 'OVerflow'
      }
    ]
    
    for item in item_list:
        print (" ".join([item["Numbers"], item["Name"]]))
    

    产生:

    1 Hello
    2 There
    3 Stack
    4 OVerflow
    

    几乎循环列表,并打印出键/值对。

    【讨论】:

      【解决方案4】:

      我会这样做:

      for doc in lst:
          print(doc['Numbers'], doc['Name'])
      

      Wich 产生所需的输出

      【讨论】:

      • 考虑在发布任何内容之前运行代码。在这里。link
      • 链接在这里有什么帮助?如果您有一些有效的答案,也可以在此处发布,并附上输出。在编辑之前你有一个糟糕的答案。您有一些没有任何解释的解决方案,这又是没有用的。 stackoverflow.com/help/how-to-answer干杯
      • 编辑前的代码也可以正常工作,但我注意到它不合适,因为它存储了一个数组,但它工作正常。无论如何,我是新来的,所以谢谢你的反馈,下次我会尽力而为。祝你有美好的一天!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 2020-04-09
      相关资源
      最近更新 更多