比较特定列表中不同索引量和相同条件的嵌套列表

问题描述 投票:0回答:1

我有两个嵌套列表和结果

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

你们能帮我吗?谢谢

python arraylist list-comprehension nested-lists
1个回答
0
投票

由于 vid1 和 vid2 共享相同的密钥,因此最好构建一个列表字典来跟踪相同密钥的 vid:

data = {}
for *key, vid in data2:
    data.setdefault(tuple(key), []).append(vid)
for key in map(tuple, data1):
    print(data.get(key, [False]).pop())

输出:

False
False
False
vid2
vid1
vid3
vid5
False
vid4
© www.soinside.com 2019 - 2024. All rights reserved.