Python 找出列表中是否没有项是字典中的键

Python 找出列表中是否没有项是字典中的键,python,list,dictionary,Python,List,Dictionary,我有以下清单: source = ['sourceid', 'SubSourcePontiflex', 'acq_source', 'OptInSource', 'source', 'SourceID', 'Sub-Source', 'SubSource', 'LeadSource_295', 'Source', 'SourceCode', 'source_code', 'SourceSubID'] 我在python中迭代XML,为每个子节点创建一个字典。字典的长度和键

我有以下清单:

source = ['sourceid', 'SubSourcePontiflex', 'acq_source', 'OptInSource', 'source',
      'SourceID', 'Sub-Source', 'SubSource', 'LeadSource_295', 'Source',
      'SourceCode', 'source_code', 'SourceSubID']
我在python中迭代XML,为每个子节点创建一个字典。字典的长度和键随每次迭代而变化。有时字典将包含一个键,该键也是此列表中的一项。有时候不会。我想做的是,如果字典中的一个键也是这个列表中的一个项,那么将该值附加到一个新列表中。如果字典中的键都不在列表源中,我想附加一个默认值。我真的有一个关于如何做这件事的大脑障碍。任何帮助都将不胜感激

in_source_and_dict = set(mydict.keys()).intersection(set(source))
in_dict_not_source = set(mydict.keys()) - set(source)
in_source_not_dict = set(source) - set(mydict.keys())

迭代你想要的结果。在这种情况下,我想您需要在源代码中迭代
,而不是在dict中迭代
,以提供默认值。

只需使用
In
关键字来检查字典中某个键的成员身份

my_dict = { some values }
values = []
for s in sources:
    if my_dict.get(s):
        values += [s]
if not values:
    values += [default]
以下示例将打印
[3,1]
,因为3和1是字典中的键,也是列表的元素

someList = [8, 9, 7, 3, 1]
someDict = {1:2, 2:3, 3:4, 4:5, 5:6}
intersection = [i for i in someList if i in someDict]
print(intersection)
您只需在每次迭代时检查此
交叉点
列表是否为空。如果列表为空,则您知道列表中没有项是字典中的键

my_dict = { some values }
values = []
for s in sources:
    if my_dict.get(s):
        values += [s]
if not values:
    values += [default]
您可以在源数组中循环,查看字典中是否有该源的值。如果有,请将其附加到值。在该循环之后,如果值为空,则附加默认值


注意,如果字典中有键、值对(val,None),则不会将None值附加到列表的末尾。如果这是一个问题,您可能不想使用此解决方案。

您可以使用
any()
函数执行此操作

dict = {...}
keys = [...]
if not any(key in dict for key in keys):
    # no keys here
等效地,使用
all()
(德摩根定律):


在Python 3中,您可以直接对dict.keys()返回的对象执行set操作。


如果将
.keys()
替换为
.viewkeys()

这几乎可以在Python 2.7中使用,但是
source
是一个列表。您必须对其进行设置,才能使用设置操作的运算符版本。@user2357112:您错了。如果需要,列表将被隐式转换,而显式转换只会增加不必要的开销(和视觉混乱)。显然,dict视图和集合的规则是不同的
set([1])和[1]
会引发一个
TypeError
,但是
{1:2}.viewkeys()和[1]
会给出
set([1])
。这是一个非常优雅和简单的解决方案。非常感谢你的帮助!
in_source_and_dict = mydict.keys() & source
in_dict_not_source = mydict.keys() - source
in_source_not_dict = source - mydict.keys()