从字典值的列表中删除某个元素

时间:2014-07-25 17:03:35

标签: python dictionary

不确定为什么我无法解决这个问题。这是我的字典:

begin = {'kim': ['a', 'c', 'nope'], 'tom': ['b', 'd', 'e', 'nope', 'nope']}

我试图从字典值中的列表中删除特定元素。我要删除的值是' nope'。因此,我想要的输出是:

begin = {'kim': ['a', 'c'], 'tom': ['b', 'd', 'e']}

这是我尝试过的,它似乎没有工作

for i in begin:
    for a in begin.get(i):
        if a == 'nope':
            del a
print begin 

任何帮助将不胜感激。似乎很基本,但似乎无法得到它

4 个答案:

答案 0 :(得分:3)

只需使用列表推导过滤掉列表中的nope,就像这样

for key in begin:
    begin[key] = [item for item in begin[key] if item != 'nope']

或者您可以完全重新创建begin字典,并使用此字典理解

begin = {key:[item for item in begin[key] if item != 'nope'] for key in begin}

答案 1 :(得分:1)

for person in begin:
    while "nope" in begin[person]:
          begin[person].remove("nope")

答案 2 :(得分:1)

您真正想要的是从列表中删除值,该列表恰好位于字典中。您可以认为list.remove('nope')可能有效,但它会从每个列表中删除一个'nope'。您可以使用理解或filter函数来过滤掉nope例如:

# python 2.x - comprehension
new_dictionary = dict(
    (key, [v for v in value if v != 'nope'])
    for key, value in begin.iteritems()
)

# python 2.x - filter
new_dictionary = dict(
    (key, filter(lambda v: v != 'nope', value))
    for key, value in begin.iteritems()
)

# python 3.x - comprehension
new_dictionary = {
    key: [v for v in value if v != 'nope']
    for key, value in begin.items()
}

# python 3.x - filter
new_dictionary = {
    key: list(filter(lambda v: v != 'nope', value))
    for key, value in begin.items()
}

答案 3 :(得分:0)

使用过滤器的一行词汇理解:

>>> {k: filter(lambda s: s!='nope', v) for k, v in begin.items()}
{'kim': ['a', 'c'], 'tom': ['b', 'd', 'e']}