这是我的字典,第一组特定于服务器,“regd”键能够适合多个或多个用户。
{
"0": {
"server": 681262466650734596,
"channel": 693639674841006101,
"balance": 1000,
"bal2": 30000,
"regd": [
{
"user": 624748908479905812,
"exp": 10,
"rank": 1,
"points": 1,
"msgs": 1,
"tokens": 10000
},
{
"user": 1096531392369807492,
"exp": 10,
"rank": 1,
"points": 1,
"msgs": 1,
"tokens": 10000
}
]
}
}
注意“user”键,两个“user”键的值不同,所以我正在编写一个函数,在调用时将包含“user”号码,然后使用给定的用户号码与其他2个用户号码进行比较,如果找到匹配,则返回与匹配的用户号码对应的其余值。 总之,使用用户号:624748908479905812 和服务器号:681262466650734596 调用一个函数,该函数应该读取整个字典,迭代一个键以搜索匹配的服务器号,当找到时,迭代该字典中的嵌套字典“regd”键,搜索与给定用户号码匹配的用户号码,当且仅当服务器号码匹配并且用户号码匹配时返回数据。它应该只返回具有相应键的字典,而不是两者都返回。
这是我现在检查数据的功能:
def StatsBlyatX(self, User: bool, Server: bool):
gop = self.ReadLevel()
for key, value_key in gop.items():
if value_key['server'] == Server:
rlist = value_key['regd']
try:
g = [gop[i]['server'] for i in gop if gop[i]['server'] == Server]
ch = [gop[i]['channel'] for i in gop if gop[i]['server'] == Server]
b1 = [gop[i]['balance'] for i in gop if gop[i]['server'] == Server]
b2 = [gop[i]['bal2'] for i in gop if gop[i]['server'] == Server]
for entry in rlist:
if entry['user'] == User:
msgs = entry['msgs']
tokens = entry['tokens']
exp = entry['exp']
user = entry['user']
rank = entry['rank']
points = entry['points']
FS = (g, ch, b1, b2, msgs, tokens, exp, user, rank, points)
print(FS)
print("stats got")
return #FS
except Exception as e:
print(e)
return None
但是当我希望它返回两个“regd”字典之一时,它返回 None
您可以通过理解来简化它,但如果您想使用两个
for
循环,您可以在理解中看到它们。
def StatsBlyatX(self, user_id: int, server_id: int):
gop = self.ReadLevel()
return [
user
for server in gop.values() if server["server"] == server_id
for user in server["regd"] if user["user"] == user_id
]
如果你想使用
for
循环,那么也许:
def StatsBlyatX(self, user_id: int, server_id: int):
gop = self.ReadLevel()
result = []
for server in gop.values():
if server["server"] == server_id:
for user in server["regd"]:
if user["user"] == user_id:
result.append(user)
return result