假设我有一本字典:
D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
我想从中删除所有3
sD1
以便我得到:
D1 = {'A1' : [2], 'B1': [], 'C1' : [4, 5]}
假设我有一本字典:
D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
我想从中删除所有3
sD1
以便我得到:
D1 = {'A1' : [2], 'B1': [], 'C1' : [4, 5]}
这是一个单行:
threeless = {k: [e for e in v if e != 3] for k, v in D1.iteritems()}
在我看来,我读过的所有答案都创建了一个新对象:Eric 的答案中的新 dic,其他答案中的新列表。
我认为最好对每个列表进行就地修改,特别是如果字典中的项目数和/或列表的元素数很大:
D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
for li in D1.itervalues():
while 3 in li:
li.remove(3)
像这样的东西,假设 3 总是出现在值中,而不是在键中
>>> for v in D1.values():
... if 3 in v:
... v.remove(3)
...
>>> D1
{'A1': [2], 'C1': [4, 5], 'B1': [3]}
编辑:刚刚意识到可以多次出现,试试这个
>>> D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
>>> for k, v in D1.items():
... D1[k] = filter(lambda x: x!=3, v)
...
>>> D1
{'A1': [2], 'C1': [4, 5], 'B1': []}
遍历D1
获取列表的键并从中删除3
s。
D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
def rem_d(D1,n):
for d in D1:
D1[d] = [i for i in D1[d] if i != n]
rem_d(D1,3)
D1
{'A1' : [2], 'B1': [], 'C1' : [4, 5]}
for l in D1.itervalues():
l[:] = [item for item in l if item != 3]
请注意,这是一种奇怪且低效的数据结构方式,并且这种删除需要一段时间。
这是一种循环遍历列表中的键和调用过滤器的方法:
>>> D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}
>>> for k in D1:
... D1[k] = filter(lambda v: v != 3, D1[k])
...
>>> D1
{'A1': [2], 'C1': [4, 5], 'B1': []}