比较 Python 中列表的匹配元素
Comparing matching elements of a list in Python
例如,如何让一个列表中的第 5 项与另一个列表中的第 5 项匹配,然后在匹配时发送该结果?这是 json 的示例:
{
"List1": [
"name1",
"name2",
"name3",
"name4",
"name5",
],
"List2": [
"emoji1",
"emoji2",
"emoji3",
"emoji4",
"emoji5",
]
}
字符在第二个列表中找到项目,我需要使其与第一个列表中的专有名称相对应。它们的顺序已经正确,所以第 5 个名字与第 5 个表情符号匹配。如果相关,我正在使用这种方法来查找玩家拥有的表情符号:
scan = f"privatelink"
async with aiohttp.ClientSession() as cs:
async with cs.get(scan) as r:
try: Bag = ast.literal_eval(await r.text())
except: Bag = json.loads(await r.text())
json 看起来像这样:
[{"emojis":"emoji10,emoji20,emoji11,emoji14,emoji30,,emoji9,emoji44,emoji53,emoji16,emoji48"}]
看起来真的很奇怪,我想这可能真的是我的问题。我不认为我以前见过这样的 json 并且不知道如何解析它。
假设我拥有第二个列表中的“emoji5”。我想将其与第一个列表中的“name5”匹配。我如何匹配这些结果?
您可以在列表中使用 index()
来查找您正在搜索的项目的索引。但是,如果您经常这样做或者列表很长,这真的很昂贵。相反,您应该使用字典:
x = {
'emoji1': 'name1',
'emoji2': 'name2',
# etc.
}
现在可以用x['emoji1']
快速查询数据了。
不确定我是否理解您的问题...但是如果您只是想匹配两个等长列表的相应元素,请使用 zip
import json
data = json.loads("""
{
"List1": [
"name1",
"name2",
"name3",
"name4",
"name5"
],
"List2": [
"emoji1",
"emoji2",
"emoji3",
"emoji4",
"emoji5"
]
}
""")
print(dict(zip(data['List2'], data['List1'])))
打印:
{'emoji1': 'name1', 'emoji2': 'name2', 'emoji3': 'name3', 'emoji4': 'name4', 'emoji5': 'name5'}
我可以这样做:
bag = bag[0]['items']
emj = c['smiley']
nam = c['words']
for x in emj:
if x in bag:
for x in [emj.index(x)]:
J = c['words'][x]
我现在的问题是 J
当分配给 Discord 嵌入 field.name 或描述时,它们只是一次用不同的嵌入向每个人发送垃圾邮件。答案是正确的,但我如何将每个词放入它自己的字段,或者拆分成它自己的描述部分,而不是为每个词发送一个新的嵌入?我试过这个:
e = discord.Embed(title=f"Test", color=discord.Colour(value=),
description=f'')
e.add_field(name=J, value=f"")
await ctx.send(embed=e)
但它只是在第一个结果中添加一个字段并发送嵌入,然后发送另一个包含下一个结果的嵌入,依此类推。顺便说一句,不要介意颜色值,我还在努力决定哈哈。
例如,如何让一个列表中的第 5 项与另一个列表中的第 5 项匹配,然后在匹配时发送该结果?这是 json 的示例:
{
"List1": [
"name1",
"name2",
"name3",
"name4",
"name5",
],
"List2": [
"emoji1",
"emoji2",
"emoji3",
"emoji4",
"emoji5",
]
}
字符在第二个列表中找到项目,我需要使其与第一个列表中的专有名称相对应。它们的顺序已经正确,所以第 5 个名字与第 5 个表情符号匹配。如果相关,我正在使用这种方法来查找玩家拥有的表情符号:
scan = f"privatelink"
async with aiohttp.ClientSession() as cs:
async with cs.get(scan) as r:
try: Bag = ast.literal_eval(await r.text())
except: Bag = json.loads(await r.text())
json 看起来像这样:
[{"emojis":"emoji10,emoji20,emoji11,emoji14,emoji30,,emoji9,emoji44,emoji53,emoji16,emoji48"}]
看起来真的很奇怪,我想这可能真的是我的问题。我不认为我以前见过这样的 json 并且不知道如何解析它。
假设我拥有第二个列表中的“emoji5”。我想将其与第一个列表中的“name5”匹配。我如何匹配这些结果?
您可以在列表中使用 index()
来查找您正在搜索的项目的索引。但是,如果您经常这样做或者列表很长,这真的很昂贵。相反,您应该使用字典:
x = {
'emoji1': 'name1',
'emoji2': 'name2',
# etc.
}
现在可以用x['emoji1']
快速查询数据了。
不确定我是否理解您的问题...但是如果您只是想匹配两个等长列表的相应元素,请使用 zip
import json
data = json.loads("""
{
"List1": [
"name1",
"name2",
"name3",
"name4",
"name5"
],
"List2": [
"emoji1",
"emoji2",
"emoji3",
"emoji4",
"emoji5"
]
}
""")
print(dict(zip(data['List2'], data['List1'])))
打印:
{'emoji1': 'name1', 'emoji2': 'name2', 'emoji3': 'name3', 'emoji4': 'name4', 'emoji5': 'name5'}
我可以这样做:
bag = bag[0]['items']
emj = c['smiley']
nam = c['words']
for x in emj:
if x in bag:
for x in [emj.index(x)]:
J = c['words'][x]
我现在的问题是 J
当分配给 Discord 嵌入 field.name 或描述时,它们只是一次用不同的嵌入向每个人发送垃圾邮件。答案是正确的,但我如何将每个词放入它自己的字段,或者拆分成它自己的描述部分,而不是为每个词发送一个新的嵌入?我试过这个:
e = discord.Embed(title=f"Test", color=discord.Colour(value=),
description=f'')
e.add_field(name=J, value=f"")
await ctx.send(embed=e)
但它只是在第一个结果中添加一个字段并发送嵌入,然后发送另一个包含下一个结果的嵌入,依此类推。顺便说一句,不要介意颜色值,我还在努力决定哈哈。