l= [1,2,3] d = {'a':[1,3,5,7],'b':[2,3,4,5]} for x in d: for y in d[x]: if y in l: d[x].remove(y) print(d)
结果: {'a': [3, 5, 7], 'b': [3, 4, 5]}
python 用的 3.6,为什么 d 中的数组都只去掉了一个元素?
[1,3,5,7] 的时候取出 1,然后删掉: [1,3,5,7] ===》[3,5,7]
然后继续取到第二个 5,匹配不到。
正解
请教下 for y in d[x]:这句, 字典可以直接用 d[x] 吗?不应该是 d.values() 吗?
d[x] 的 value 是啥?
上面的 x 表示 a,b, d['a']=[1,3,5,7]
特意去跑了下结果贴出来给有疑问的同学~: x: a y: 1 dx: [1, 3, 5, 7] y: 5 dx: [3, 5, 7] y: 7 dx: [3, 5, 7] x: b y: 2 dx: [2, 3, 4, 5] y: 4 dx: [3, 4, 5] y: 5 dx: [3, 4, 5]
d_new: {'a': [3, 5, 7], 'b': [3, 4, 5]}
我没理解错的话,这么写?
{k: list(filter(lambda t: t not in l, v)) for k, v in d.items()}
大神 涨姿势了
意思是取 y=1 做循环,remove(1)以后,列表变成 [3,5,7],但是 3 成了列表中的第一个,但是循环认为已经取过了第一个数据,就从 remove 以后的列表中取第二个数据 5,继续循环,从而跳过了 3?