提问人:Yogyakartas 提问时间:9/6/2023 最后编辑:Yogyakartas 更新时间:9/6/2023 访问量:42
比较特定列表中具有不同索引量和相同条件的嵌套列表
Compare Nested List With Different Index Amount and Same Condition in Particular List
问:
我有两个嵌套列表和结果
data1 = [
["tr1", 1002, 6798381], # return false
["tr1", 1001, 6798381], # return false
["tr1", 1001, 6798381], # return false
["tr1", 1000, 6798381], # return vid1
["tr1", 1000, 6798381], # return vid2 (can be vid1, but vid1 already used) | But I got False
["tr2", 1200, 6798382], # vid3
["tr4", 1200, 6798384], # vid5
["tr5", 1200, 6798385], # false
["tr3", 1200, 6798383], # vid4
]
data2 = [
["tr1", 1000, 6798381, "vid1"],
["tr1", 1000, 6798381, "vid2"],
["tr2", 1200, 6798382, "vid3"],
["tr3", 1200, 6798383, "vid4"],
["tr4", 1200, 6798384, "vid5"]
]
如果值相同,我需要将 Data2 最后一个索引(Data2[-1] 即 vid1 或 vid2 等)移动到 data1 中,但如果 data2 vid 已经被占用,我应该删除,这样我就不会从 data2 获取多个数据
我使用的代码
for x in data1:
key = (x[0], x[1], x[2])
if key in data2_dict:
print(data2_dict[key])
# Remove the key from data2_dict to prevent reuse
del data2_dict[key]
else:
print("false")
我从代码中得到的输出
false
false
false
vid1
False (should be vid1 or vid2, but vid1 already used so should be vid2)
vid3
vid5
false
vid4
我期望的输出
false
false
false
vid1
vid2
vid3
vid5
false
vid4
or
false
false
false
vid2 --
vid1 --
vid3
vid5
false
vid4
编辑预期结果: 而不是打印 vid/false 您可以移动到 data1 吗?
["tr1", 1002, 6798381], # return false
["tr1", 1001, 6798381, 'false'], # return false
["tr1", 1001, 6798381, 'false'], # return false
["tr1", 1000, 6798381, 'vid1'], # return vid1
["tr1", 1000, 6798381, 'vid2'], # return vid2 (can be vid1, but vid1 already used) | But I got False
["tr2", 1200, 6798382, 'vid3'], # vid3
["tr4", 1200, 6798384, 'vid5'], # vid5
["tr5", 1200, 6798385, 'false'], # false
["tr3", 1200, 6798383, 'vid4'], # vid4
你们能帮我吗?谢谢
答:
1赞
blhsing
9/6/2023
#1
由于并共享相同的密钥,因此最好构建列表词典以跟踪相同密钥的视频。迭代键时,从 中弹出当前键的子列表中的 vid 以防止重用。输出 if 是从不存在的键引发的,或者如果是从已耗尽的子列表引发的:vid1
vid2
data1
'false'
KeyError
IndexError
data = {}
for *key, vid in data2:
data.setdefault(tuple(key), []).append(vid)
output = []
for key in map(tuple, data1):
try:
vid = data[key].pop()
except (KeyError, IndexError):
vid = 'false'
output.append([*key, vid])
output
成为:
[['tr1', 1002, 6798381, 'false'],
['tr1', 1001, 6798381, 'false'],
['tr1', 1001, 6798381, 'false'],
['tr1', 1000, 6798381, 'vid2'],
['tr1', 1000, 6798381, 'vid1'],
['tr2', 1200, 6798382, 'vid3'],
['tr4', 1200, 6798384, 'vid5'],
['tr5', 1200, 6798385, 'false'],
['tr3', 1200, 6798383, 'vid4']]
演示:在线试用!
评论