找出列表中的项目是否是字典中的键

时间:2013-09-11 18:53:32

标签: python list dictionary

我有这个清单:

source = ['sourceid', 'SubSourcePontiflex', 'acq_source', 'OptInSource', 'source',
      'SourceID', 'Sub-Source', 'SubSource', 'LeadSource_295', 'Source',
      'SourceCode', 'source_code', 'SourceSubID']

我在python中迭代XML,为每个子节点创建一个字典。字典的长度和密钥随每次迭代而变化。有时字典将包含一个键,该键也是此列表中的项。有时它不会。我想要做的是,如果字典中的键也是此列表中的项,则将值附加到新列表。如果字典中没有任何键在列表源中,我想添加一个默认值。我真的有一个关于如何做到这一点的大脑。任何帮助,将不胜感激。

5 个答案:

答案 0 :(得分:7)

只需使用in关键字检查词典中某些键的成员资格。

以下示例将打印[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)

您可以在每次迭代时检查此intersection列表是否为空。如果列表为空,那么您就知道列表中没有项目是字典中的键。

答案 1 :(得分:4)

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())

迭代你想要的结果。在这种情况下,我猜你想要迭代in_source_not_dict来提供默认值。

答案 2 :(得分:2)

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

in_source_and_dict = mydict.keys() & source
in_dict_not_source = mydict.keys() - source
in_source_not_dict = source - mydict.keys()

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

,这也适用于Python 2.7

答案 3 :(得分:1)

my_dict = { some values }
values = []
for s in sources:
    if my_dict.get(s):
        values += [s]
if not values:
    values += [default]

您可以遍历sources数组并查看字典中是否存在该源的值。如果有,请将其附加到值。在该循环之后,如果值为空,则附加默认值。

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

答案 4 :(得分:1)

您可以使用any()功能

执行此操作
dict = {...}
keys = [...]
if not any(key in dict for key in keys):
    # no keys here

同等地,all()(德莫根定律):

if all(key not in dict for key in keys):
    # no keys here