Python 如何使用字典列表作为函数参数
我从以下代码开始:Python 如何使用字典列表作为函数参数,python,list,dictionary,arguments,Python,List,Dictionary,Arguments,我从以下代码开始: import bs4, requests def bal(address, symbol, name): r = requests.get('https://bitinfocharts.com/' + name + '/address/' + address) soup = bs4.BeautifulSoup(r.text, 'html.parser') elems = soup.find('div', itemprop =
import bs4, requests
def bal(address, symbol, name):
r = requests.get('https://bitinfocharts.com/' + name + '/address/' + address)
soup = bs4.BeautifulSoup(r.text, 'html.parser')
elems = soup.find('div', itemprop = 'offers').contents[0].text
elems = elems.replace(symbol,'').strip()
return(elems)
print(bal('3D2oetdNuZUqQHPJmcMDDHYoqkyNVsFk9r', 'BTC', 'Bitcoin'))
print(bal('LQL9pVH1LsMfKwt82Y2wGhNGkrjF8vwUst', 'LTC', 'Litecoin'))
其工作和产生:
174,631.39464194
897,135.38526651
但是,这个函数需要在一大组字典中运行,因此我尝试修改代码并将数据放在字典中,然后列出要作为函数参数传递的字典列表
import bs4, requests
wallet1 = {
'address' : '3D2oetdNuZUqQHPJmcMDDHYoqkyNVsFk9r',
'symbol' : 'BTC',
'name' : 'Bitcoin',
}
wallet2 = {
'address' : 'LQL9pVH1LsMfKwt82Y2wGhNGkrjF8vwUst',
'symbol' : 'LTC',
'name' : 'Litecoin',
}
wallets = [wallet1, wallet2]
def bal(address, symbol, name):
r = requests.get('https://bitinfocharts.com/' + name + '/address/' + address)
soup = bs4.BeautifulSoup(r.text, 'html.parser')
elems = soup.find('div', itemprop = 'offers').contents[0].text
elems = elems.replace(symbol,'').strip()
return(elems)
print(bal(wallets))
我收到了以下错误消息:
Traceback (most recent call last):
File "/Users/tfountain/Desktop/python_work/stack.py", line 46, in <module>
print(bal(wallets))
TypeError: bal() missing 2 required positional arguments: 'symbol' and 'name'
>>>
我到底哪里出了问题
如何使用字典列表作为函数参数?函数“bal”需要3个参数 您使用一个参数调用bal,因此它会抱怨缺少23-1=2 您需要修改bal函数,使其只能接受一个参数,例如
def bal(wallets):
并从传递的参数中提取钱包字典,例如通过迭代:
for w in wallets
因此,现在您可以通过w dict访问“地址、符号、名称”,例如:
address = w['address']
symbol = w['sumbol']
name = w['name']
以下是适用于您的代码:
def bal(wallets):
elems_all = []
for w in wallets:
address = w['address']
symbol = w['symbol']
name = w['name']
r = requests.get('https://bitinfocharts.com/' + name + '/address/' + address)
soup = bs4.BeautifulSoup(r.text, 'html.parser')
elems = soup.find('div', itemprop = 'offers').contents[0].text
elems = elems.replace(symbol,'').strip()
elems_all.append([elems, w])
return elems_all
这是一个非常基本的实现,但它对您有效。您可能希望修改它以使用更漂亮的Python实现
您可以通过访问elems_所有元组列表来访问with wallet的正确元素 TL;博士
for w in wallets:
print(bal(**w))
解决方案需要理解两个不同的概念,循环和参数解包
你不能打电话
bal(wallets)
因为这是在调用不存在的函数bal…您的函数有三个参数,而不是一个。由于您的bal功能需要一个钱包,我们只需为您列表中的每个钱包调用一次即可
您的函数仍然需要三个参数,因此我们不能只传递w,因为它是一个字典。您可以使用一点python语法糖自动从字典中提取值,并将它们作为命名参数传递给函数。因此bal**w的行为将与baladdress=,symbol=,name=
使用这种方法需要记住的一点是,参数解包将把dict中的所有key/vals传递给函数,因此,如果您添加了意外的内容,您将得到一个错误。您当前将dictionary作为第一个参数address传递。重写方法以获取单个字典,或者使用bal**wallet将字典解包为单独的参数。您根本没有更改bal的实现,为什么您希望它能工作?请尝试bal**wallet1@juanpa-python新手不知道需要更改什么。这就是我在stackoverflow上的结论。@但是youe bal函数每次调用只解析一个!如果你真的想检查每一个钱包,你应该定义第二个函数calll many_bal类似的东西,然后在里面做一个循环和调用!我看到了更新后的代码,但我现在得到了错误-TypeError:append只接受一个参数2 givensory,我应该在添加编辑之前测试它。elems_all.appendelems,w改为list elems_all.append[elems,w]或tuple elems_all.appendelems,有什么简单的方法可以将余额附加到字典中吗?嘿,Tommy,我建议您在开始问进一步的问题之前先了解Python的基础知识和数据类型操作。只需搜索Python字典操作。字典是键:值对的构建。将k:v对附加到dict:dict1['k1']='v1'