我有这个清单:
source = ['sourceid', 'SubSourcePontiflex', 'acq_source', 'OptInSource', 'source',
'SourceID', 'Sub-Source', 'SubSource', 'LeadSource_295', 'Source',
'SourceCode', 'source_code', 'SourceSubID']
我在python中迭代XML,为每个子节点创建一个字典。字典的长度和密钥随每次迭代而变化。有时字典将包含一个键,该键也是此列表中的项。有时它不会。我想要做的是,如果字典中的键也是此列表中的项,则将值附加到新列表。如果字典中没有任何键在列表源中,我想添加一个默认值。我真的有一个关于如何做到这一点的大脑。任何帮助,将不胜感激。
答案 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()
。
答案 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