我有一个字典,想要从其值列表中删除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
中的值,并为广告中的值返回None
。
d = {1: ['a', 'c'], 2: ['b'], 5: []}
ad = {1: None, 5: None}
如何获得如下字典:
new_dict = {1: ['a','c'], 2:['b']}
没有循环?我有一个更大的字典要处理,我想以最有效的方式做到这一点。
答案 0 :(得分:2)
没有循环就无法做到:
Update-Database -ProjectName EventsApp.Contexts -YourOtherOptions
或使用过滤器:
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)
答案 1 :(得分:0)
嗯,你可以使用' list comprehension',这个衬里有效,我觉得我觉得这很难看。
ad = {k:v for k,v in {k:[i for i in v if i not in bad_list] for k,v in d.items()}.items() if v}
我最好使用for循环。
ad2 = dict()
for k,v in d.items():
_data_ = [item for item in v if item not in bad_list]
if _data_:
ad2[k]=_data_
输出:
print 'd =', d
print 'ad =', ad
print 'ad2=', ad2
>d = {1: ['a', 'c', 'd'], 2: ['b'], 5: ['e']}
>ad = {1: ['a', 'c'], 2: ['b']}
>ad2= {1: ['a', 'c'], 2: ['b']}
答案 2 :(得分:0)
以下使用Python 3.5编写的代码似乎按照您的问题要求执行。它需要进行最小的更改才能与Python 2.x一起使用。只需使用print
语句而不是函数。
d = {1: ['a', 'c', 'd'], 2: ['b'], 5: ['e']}
bad_list = ['d', 'e']
ad = {a: b for a, b in ((a, [c for c in b if c not in bad_list]) for a, b in d.items()) if b}
print('d =', d)
print('ad =', ad)