我有一个字典,想从它的值列表中删除 bad_list
中的某些值,并返回其余部分。这是代码:
d = {1: ['a', 'c', 'd'], 2: ['b'], 5: ['e']}
bad_list = ['d','e']
ad = {k:d[k].remove(i) for k in d.keys() for sublist in d[k] for i in sublist if i in bad_list}
print 'd =', d
print 'ad =', ad
不幸的是,它会永久更改 d
中的值,并为 ad 中的值返回 None
。
d = {1: ['a', 'c'], 2: ['b'], 5: []}
ad = {1: None, 5: None}
我怎样才能得到一个看起来像这样的字典:
new_dict = {1: ['a','c'], 2:['b']}
没有循环?我有一个更大的字典要处理,我想以最有效的方式处理。
最佳答案
没有循环就没有办法:
d = dict((key, [x for x in value if x not in bad_list]) for key, value in d.iteritems())
或使用过滤器:
d = dict((key, filter(lambda x: x not in bad_list, d[key])) for key in d)
更新
排除空值:
d = dict((key, list(x)) for key in d for x in [set(d[key]).difference(bad_list)] if x)
关于python - 从另一个字典中提取带有值子集的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34856771/