1

假设我有一本字典:

D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}

我想从中删除所有3sD1以便我得到:

D1 = {'A1' : [2], 'B1': [], 'C1' : [4, 5]}
4

6 回答 6

5

这是一个单行:

threeless = {k: [e for e in v if e != 3] for k, v in D1.iteritems()}
于 2013-07-21T21:21:44.450 回答
3

在我看来,我读过的所有答案都创建了一个新对象:Eric 的答案中的新 dic,其他答案中的新列表。

我认为最好对每个列表进行就地修改,特别是如果字典中的项目数和/或列表的元素数很大:

D1 = {'A1' : [2, 3], 'B1': [3, 3], 'C1' : [4, 5]}

for li in D1.itervalues():
    while 3 in li:
        li.remove(3)
于 2013-07-21T22:02:16.070 回答
2

像这样的东西,假设 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': []}
于 2013-07-21T21:19:33.337 回答
1

遍历D1获取列表的键并从中删除3s。

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]}
于 2013-07-21T21:20:09.743 回答
1
for l in D1.itervalues():
    l[:] = [item for item in l if item != 3]

请注意,这是一种奇怪且低效的数据结构方式,并且这种删除需要一段时间。

于 2013-07-21T21:21:37.683 回答
1

这是一种循环遍历列表中的键和调用过滤器的方法:

>>> 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': []}
于 2013-07-21T21:31:29.820 回答