首页 > 解决方案 > 两个列表之间的Python多重条件

问题描述

我正在使用 python 3,我需要检查不同列表中的 3 个变量。username age lang如果与其他列表不同,我想打印数据

这是我的代码:

list1 = []
list2 = []

list1.append({'username' : 'alice', 'age' : 25, 'lang' : 'IT'})
list1.append({'username' : 'carole', 'age' : 40, 'lang' : 'FR'})
list1.append({'username' : 'john', 'age' : 30, 'lang' : 'FR'})
list1.append({'username' : 'mick', 'age' : 20, 'lang' : 'US'})
list1.append({'username' : 'mick', 'age' : 30, 'lang' : 'US'})

list2.append({'username' : 'mick-c', 'age' : 30, 'lang' : 'US'})
list2.append({'username' : 'john', 'age' : 30, 'lang' : 'FR'})
list2.append({'username' : 'john-b', 'age' : 30, 'lang' : 'FR'})

for l1 in list1:
    username = l1['username']
    age = l1['age']
    lang = l1['lang']

    for l2 in list2:
        if username not in l2['username'] and l2['age'] != age and l2['lang'] != lang:
            print(str(username) + ' ' + str(age) + ' ' + str(lang))

输出 :

alice 25 IT
alice 25 IT
alice 25 IT
carole 40 FR
mick 20 US
mick 20 US

我的预期输出是:

alice 25 IT
carole 40 FR
mick 20 US

如何在循环中不包含重复数据?还有另一种方法可以做我想做的事情,而不是使用双循环?

标签: pythonlistdictionary

解决方案


仅当在 中找不到记录时才应输出记录,因此在确保所有 3 个字段都通过相等测试(而不是不等式测试)没有条目后list2,您应该使用for-else构造:printlist2

for l1 in list1:
    username = l1['username']
    age = l1['age']
    lang = l1['lang']

    for l2 in list2:
        if username in l2['username'] and l2['age'] == age and l2['lang'] == lang:
            break
    else:
        print(str(username) + ' ' + str(age) + ' ' + str(lang))

这输出:

alice 25 IT
carole 40 FR
mick 20 US

推荐阅读