【问题标题】:Assigning values from list to variables in Python [closed]在Python中将值从列表分配给变量[关闭]
【发布时间】:2023-03-18 07:11:01
【问题描述】:

我使用 selenium 编写了一个刮板,其中一部分非常未优化。我在迭代中为变量赋值。我确信有一种方法可以只在一次迭代中完成。我只是不知道怎么做。 这是我正在使用的代码:

params = driver.find_elements_by_class_name('param-label')
values = driver.find_elements_by_class_name('param-value')

i = 0

for param, value in zip(params, values):

if not done:

    if param.text == 'Celková cena:':
        cena = value.text
    if param.text == 'Poznámka k ceně:':
        poznamkaCena = value.text
    if param.text == 'Aktualizace:':
        aktualizace = value.text
    if param.text == 'Stavba:':
        stavba = value.text
    if param.text == 'Stav objektu:':
        stavObjektu = value.text
    if param.text == 'Vlastnictví:':
        vlastnictvi = value.text
    if param.text == 'Umístění objektu:':
        umisteniObjektu = value.text
    if param.text == 'Podlaží:':
        podlazi = value.text
    if param.text == 'Užitná plocha:':
        uzitnaPlocha = value.text
    if param.text == 'Sklep:':
        sklep = value.text
    if param.text == 'Voda:':
        voda = value.text
    if param.text == 'Plyn:':
        plyn = value.text
    if param.text == 'Odpad:':
        odpad = value.text
    if param.text == 'Elektřina:':
        elektrina = value.text
    if param.text == 'Doprava:':
        doprava = value.text
    if param.text == 'Energetická náročnost budovy:':
        energetickaNarocnost = value.text

i += 1

if i == len(params):
    done = True

拜托,你能告诉我如何在一次迭代中做到这一点吗?

【问题讨论】:

  • 为什么需要单个变量?你能解释一下你的代码最终做了什么吗?
  • 所以你需要检查param.text == text,然后每次保存到不同的变量?
  • (1) 后面的if可以全部转换成elif。 (2) 无需检查done==Truei+=1zip 默认在较短的列表耗尽时停止迭代。如果您希望 zip 迭代直到更长的列表耗尽,请使用:stackoverflow.com/a/1277311/6400614
  • 你会用字典吗? {params[i].text : values[i].text for i in range(len(params))}
  • 代码从真人秀网站获取参数和值。 params 和 values 都是一个列表。然后我使用变量将这些值发送到 sqlite 数据库中。我在页面加载时有这些值,我确信我可以在一次迭代中将它们存储到变量中。我只是不知道如何从列表中引用这些值。

标签: python list iteration


【解决方案1】:

您不需要所有的if 和许多变量,而是使用字典。你也不需要使用done 标志,zip 会为你做这件事

variables = {'cena': '', 'poznamkaCena': '', 'aktualizace': ''}
texts = {'Celková cena:': 'cena', 'Poznámka k ceně:': 'poznamkaCena', 'Aktualizace:': 'aktualizace'}

params = driver.find_elements_by_class_name('param-label')
values = driver.find_elements_by_class_name('param-value')

for param, value in zip(params, values):
    if param.text in texts:
        variables[texts[param.text]] = value.text

variables['cena'] 将具有与 cena 变量相同的值。

【讨论】:

    【解决方案2】:
    your_dict = {p: v for p, v in zip(params, values) if p in [x for x in texts if x in params]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 2012-07-29
      • 1970-01-01
      • 2016-02-08
      相关资源
      最近更新 更多