3 回答
TA贡献1802条经验 获得超6个赞
您可以找到一个“禁止”索引列表,然后可用于过滤结构:
someDict = {
'foo1': [1, 4, 7, 0, -2],
'foo2': [0, 2, 5, 3, 6],
'foo3': [1, 2, 3, 4, 5]
}
results = {i for c in someDict.values() for i, a in enumerate(c) if not a}
new_dict = {a:[c for i, c in enumerate(b) if i not in results] for a, b in someDict.items()}
输出:
{'foo1': [4, 7, -2], 'foo2': [2, 5, 6], 'foo3': [2, 3, 5]}
TA贡献1827条经验 获得超7个赞
这是一个厚颜无耻的单线:
>>> dict(zip(someDict, map(list, zip(*(ts for ts in zip(*someDict.values()) if all(ts))))))
{'foo3': [2, 3, 5], 'foo1': [4, 7, -2], 'foo2': [2, 5, 6]}
>>>
TA贡献1856条经验 获得超5个赞
其他选项,更详细和更具破坏性的 ( pop) 用于original_dict:
some_dict = {
'foo1': [1, 0, 2, 3, -2],
'foo2': [0, 2, 5, 3, 6],
'foo3': [1, 2, 3, 0, 5]
}
for k, v in some_dict.items():
id = []
for i, e in enumerate(v):
if e == 0: id.append(i-len(id))
[ [ some_dict[k].pop(x) for x in id ] for k,v in some_dict.items() ]
print(some_dict)
#=> {'foo1': [2, -2], 'foo2': [5, 6], 'foo3': [3, 5]}
添加回答
举报