python - 在 discord bot 中构建字典词典
问题描述
我正在尝试创建一个简单的机器人来计算对股票代码评论的请求。
有一小群交易者要求 TA 专家分析图表。这将作为一个不和谐的机器人运行。
我想创建一个类似的字典
民意调查[股票][用户] = 1
这样,它将保存一个用户字典的字典,该字典以股票符号为键。
这样就不能重复代码请求,并且用户不能两次为同一个代码投票。
然后我将把它保存在 Repl.it 上的密钥库中
这是我使用 python 的第二天,虽然我以前用其他语言编写过代码,但已经没有很多年了。只是想确保我走在正确的轨道上。
用户将输入他们的投票,例如:
!v ZRX
最终,我们将希望看到如下结果:
!民意调查结果
ZRX:MoonRaccoon,Dontcallmeskaface,TheDirtyTree
链接:MoonRaccoon,TheDirtyTree
XRP:Dontcallmeskaface
所以我认为支持这一点的最佳数据结构是这样的:
poll = {'ZRX':{'MoonRaccoon':1,'Dontcallmeskaface':1,'TheDirtyTree':1},'LINK':{'MoonRaccoon':1,'TheDirtyTree':1},'XRP':{ 'Dontcallmeskaface'}:1}
这有意义吗?
client = discord.Client()
def update_poll(ticker,requestor):
vote = {ticker : {requestor : 1}}
if "poll" in db.keys():
db["poll"].setdefault(ticker, {})[requestor] = 1
else:
db["poll"] = vote
@client.event
async def on_ready():
print('We have logged in as {0.user}'.format(client))
@client.event
async def on_message(message):
if message.author == client.user:
return
msg = message.content
if msg.startswith("!v"):
ticker = msg.split("!v ",1)[1]
author = str(message.author).split("#",1)[0]
update_poll(ticker,author)
await message.channel.send("vote for " + ticker + " by " + author + " added.")
await message.channel.send(db["poll"])
if msg.startswith("!clear"):
db["poll"] = {}
await message.channel.send("poll cleared")
await message.channel.send(db["poll"])
我设置了 db = {},现在它似乎没有添加任何投票。
无论我投票给谁,数据结构的每次输出都是相同的。:
!v MATIC
vote for MATIC by MoonRaccoon added.
{}
解决方案
尝试这个
def update_poll(ticker,requestor):
vote = {ticker : {requestor : 1}}
if "poll" in db.keys():
db["poll"].setdefault(ticker, {})[requestor] = 1
else:
db["poll"] = vote
编辑:上面的答案假设您使用的是内置字典不确定 replit.db 是否具有 setdefault 方法。尝试这个:-
def update_poll(ticker,requestor):
vote = {ticker : {requestor : 1}}
if "poll" in db.keys():
if ticker in db["poll"].keys():
db["poll"][ticker][requestor] = 1
else:
db["poll"][ticker] = {}
db["poll"][ticker][requestor] = 1
else:
db["poll"] = vote
推荐阅读
- java - 如何获取 mapA 中的键,因为 mapB 中的键是 mapA 中键的子字符串?
- c++ - 如何通过拆分数据计算大文件中的单词?
- python - Vlookup 功能/合并 Pandas 但不完全匹配
- python - 将列添加到熊猫中的特定级别数据透视表
- spring-boot - com.fasterxml.jackson.databind.JsonMappingException:java.util.Optional 不能转换为 java.time.LocalDate
- java - 为对象引用声明类字段,而不是使用本地函数
- fortran - 我的表达式中缺少实数错误中的指数
- laravel - 在并发请求中使用 Redisearch
- reactjs - 不能在 React Typescript 中使用 useContext
- asp.net-core - NetCore:如何管理从主应用程序到子域的请求?