python - 显示来自 2 个单独的 JSON 文件的 JSON 数据 Discord PY
问题描述
我有 2 个单独的 JSON 文件,一个存储用户 ID 和“现金”,另一个存储用户 ID 和“城市”。我存储在单独的 JSON 文件中的原因是为了以防出错,它只会丢失部分数据。
在我的排行榜上,我试图显示用户拥有的现金金额以及他们来自哪个城市。现在,代码给了我一个关键错误:
File "c:\Users\test\Desktop\testclone\TESTCLONE.py", line 2411, in on_message
msg += '{0}. <@!{1}> {2} Dollars\n\n'.format(number +1, user, cash[user].get('dollars', 0)) + '\nCity: **{}**'.format(homecity[user].get('city',0))
KeyError: '244410964693221377'
此外,我尝试仅将城市显示为嵌入,我敢肯定,即使我没有收到密钥错误,它也没有抓住与现金最多的用户相关的城市。如果 JSON 文件“cash”也不存储城市,是否可以做我想做的事?
try:
with open("homecity.json") as fp:
homecity = json.load(fp)
except Exception:
homecity = {}
def save_homecity():
with open("homecity.json", "w+") as fp:
json.dump(homecity, fp, sort_keys=True, indent=4)
def add_city(user: discord.User, city: str):
id = user.id
if id not in homecity:
homecity[id] = {}
homecity[id]["city"] = homecity[id].get("city", "") + city
print("{} is now in {}".format(user.name, homecity[id]["city"]))
save_homecity()
def get_city(user: discord.User):
id = user.id
if id in homecity:
return homecity[id].get("city", 0)
return 0
try:
with open("cash.json") as fp:
cash = json.load(fp)
except Exception:
cash = {}
def save_cash():
with open("cash.json", "w+") as fp:
json.dump(cash, fp, sort_keys=True, indent=4)
def add_dollars(user: discord.User, dollars: int):
id = user.id
if id not in cash:
cash[id] = {}
cash[id]["dollars"] = cash[id].get("dollars", 0) + dollars
print("{} now has {} dollars".format(user.name, cash[id]["dollars"]))
save_cash()
def get_dollars(user: discord.User):
id = user.id
if id in cash:
return cash[id].get("dollars", 0)
return 0
if message.content.startswith('!lb cash'):
cash_leaderboard = sorted(cash, key=lambda x : cash[x].get('dollars', 0), reverse=True)
msg = ''
for number, user in enumerate(cash_leaderboard) and enumerate(city_leaderboard):
msg += '{}. <@!{}> {} Dollars | **{}**\n\n'.format(number +1, user, cash[user].get('dollars', 0), homecity[user].get('city',0))
if number == 10:
break
else:
number += 1
embed = discord.Embed(
title="TOP LEADERBOARD\nLeaders:",
color=0x24d7cf,
description=msg
)
embed.set_author(name="BOT", icon_url="")
embed.set_thumbnail(url="")
embed.set_footer(text="BOT", icon_url="")
await client.send_message(message.channel, embed=embed)
解决方案
在我的大脑煎完后,我意识到我一直都知道我的问题的答案。我变了
msg += '{0}. <@!{1}> {2} Dollars\n\n'\n\n'.format(number +1, user, cash[user].get('dollars', 0)) + '\nCity:, **{}**'.format(homecity[user].get('city',0))
到
msg += '{}. <@!{}> {} Dollars | **{}**\n\n'.format(number +1, user, cash[user].get('dollars', 0), homecity[user].get('city',0))
推荐阅读
- javascript - 无法更新不可变列表项值
- node.js - 通过创建 server.js 在 Heroku 上部署 Angular 的问题
- pynamodb - 如何在 pynamodb 中创建只读模型属性?
- python - 为什么 Repl.it 中的 %matplotlib inline 会给我一个错误?
- python - 如何在硒的屏蔽字段中输入值
- r - 'data' 必须是 data.frame,而不是 R 中的矩阵或数组错误
- environment-variables - 环境变量未在 next.js 中定义
- assembly - 为什么我的寄存器 (R0) 没有指向 ARM 程序集中的新地址?
- xamarin.ios - Xamarin.iOS - 在情节提要中自动调整图像以填满屏幕
- node.js - 使用 mongoose 删除子记录