首页 > 解决方案 > 如何使用两个不同的 .format() 并使用一个 for 循环

问题描述

所以我一直试图弄清楚如何使用一个 for 循环打印出两种不同的格式。我想在解释我的问题之前提供代码

fullList = [
  {
    'url': 'www.randomsite.com/251293',
    'numbers': '7.5'
  },
  {
    'url': 'www.randomsite.com/251294',
    'numbers': '8'
  },
  {
    'url': 'www.randomsite.com/251295',
    'numbers': '8.5'
  },
  {
    'url': 'www.randomsite.com/251296',
    'numbers': '9'
  },
  {
    'url': 'www.randomsite.com/251297',
    'numbers': '9.5'
  }
]

#fullList = [
#  {
#    'numbers': '7.5'
#  },
#  {
#    'numbers': '8'
#  },
#  {
#    'numbers': '8.5'
#  },
#  {
#    'numbers': '9'
#  },
#  {
#    'numbers': '9.5'
#  }
#]

try:
    numbersList = []
    for numbers in fullList:
        numbersList.append('{}{}'.format('{}'.format(numbers.get('url') if numbers.get('url') else ''), numbers.get('numbers')))

    print(numbersList)
except Exception:
    pass

我正在寻找的结果是:

如果 url 在列表中:print('<url|numbers>')表示格式为<url|numbers>

如果列表中没有 url:print(numbers)并且这里的打印应该只给出数字 -我有时只想要数字,这意味着在列表中我删除了所有 URL,所以它只会保留数字。

我的问题是我不知道如何将这两者组合成一种格式。到目前为止,我只能使用我提供的代码打印出数字。

标签: pythonfor-loopformat

解决方案


Using list comprehension

Ex.

fullList = [
  {'url': 'www.randomsite.com/251293','numbers': '7.5'},
  {'url': 'www.randomsite.com/251294','numbers': '8'},
  {'url': 'www.randomsite.com/251295','numbers': '8.5'},
  {'url': 'www.randomsite.com/251296','numbers': '9'},
  {'url': 'www.randomsite.com/251297','numbers': '9.5'}
]

list1 = [ "{0}|{1}".format(x['url'],x['numbers']) for x in fullList ]
print(list1)

O/P:

['www.randomsite.com/251293|7.5', 'www.randomsite.com/251294|8', 'www.randomsite.com/251295|8.5', 'www.randomsite.com/251296|9', 'www.randomsite.com/251297|9.5']

OR

for the updated question, if the dictionary does not contain url

fullList = [
  {'url': 'www.randomsite.com/251296','numbers': '9'},
  {'numbers': '9.5'}
]
list1 = [ "{0}{1}".format((x.get('url')+'|' if 'url' in x else ''),x.get('numbers','')) for x in fullList ]
print(list1)

O/P:

['www.randomsite.com/251296|9', '9.5']

推荐阅读