首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法根据字典中的项获取值

无法根据字典中的项获取值
EN

Stack Overflow用户
提问于 2018-06-27 03:32:34
回答 1查看 52关注 0票数 0

我用python编写了一个脚本来获取条目和它在字典中的值。当我运行我的脚本时,它确实以错误的方式获取它,我的意思不是我想要的方式。

我现在得到的结果是:

代码语言:javascript
复制
{'4194813.75690': 'foo', '4194813.75691': 'foo'}

但是,我希望有:

代码语言:javascript
复制
{'4194813.75690': 'foo', '4194813.75691': 'bar'}

name属性中,这个部分4194813总是稳定的,但是这个.75691部分是动态变化的,所以我不能在.startswith()中使用任何合适的标志,除非我在下面尝试过。

脚本是这样的:

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup

url = "https://www.electricityregistry.co.nz/bin_public/jadehttp.dll?MariaWebR"

res = requests.get(url)
soup = BeautifulSoup(res.text,"lxml")

formdata = {}

for items in soup.select("[name='JadeForm'] input"):
    if items.get("name").startswith('4194813'):
        item = items.get("name")
        val = "foo"  #how to change it to "bar" in the second iteration
        formdata[item] = val

print(formdata)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-27 03:48:50

有许多方法可以做到这一点。使用变量的想法是正确的;您只需要弄清楚何时更改它即可。一种简单的方法是在进入循环之前将"foo“赋值给val,使用它来赋值您的字典值,然后在使用它之后将val更改为"bar”。

代码语言:javascript
复制
val = "foo"
for items in soup.select("[name='JadeForm'] input"):
    if items.get("name").startswith('4194813'):
        item = items.get("name")
        formdata[item] = val
        val = "bar"

另一种方法是将值放入一个列表中,在列表上创建一个迭代器,然后使用next()从迭代器中获取下一个值。这是一种更通用的方法,可以用于任何数量的项目,而不仅仅是两个。

代码语言:javascript
复制
val = iter(["foo", "bar"])
for items in soup.select("[name='JadeForm'] input"):
    if items.get("name").startswith('4194813'):
        item = items.get("name")
        formdata[item] = next(val)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51050202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档