从[list]字典python中删除多个值

时间:2016-03-01 12:40:27

标签: python list dictionary python-2.x

我正在尝试从大字典中删除所有值'x'并且不删除任何键,但是当我运行代码时,仍然存在'x'个值。

以下是我的词典的摘录:

myDict = {0: ['id1', 'id2', 'id3'], 1: ['id1', 'id2', 'x', 'x'], 2: ['id1', 'x', 'x', 'x']} 

到目前为止我的代码:

for k, v in myDict.iteritems():
if v == 'x':
    myDict.remove('x')
print myDict

我的目标是:

myDict = {0: ['id1', 'id2', 'id3'], 1: ['id1', 'id2'], 2: ['id1']}

我应该如何删除列表中的'x'值?

4 个答案:

答案 0 :(得分:4)

您可以在字典理解中使用列表理解,如下所示:

 var slider = $('#range-slider'),
 textbox = $('#range-no');

 slider.change(function() {
 var newValue = parseInt($(this).val());

 textbox.empty();
 textbox.append(newValue);

( I need something here which would say...
 $('.year'+newValue).comeintoviewplease();
... or something to that effect)
 });

<强>输出

myDict = {k:[el for el in v if el != 'x'] for k, v in myDict.items()}
print(myDict)

答案 1 :(得分:2)

这样做:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <ul>
    <li>
      <input id="radio1" type="radio" name="radio[]" value="1">
      <label for="radio1">one</label>
    </li>
    <li>
      <input id="radio2" type="radio" name="radio[]" value="2">
      <label for="radio2">two</label>
    </li>
    <li>
      <input id="radio3" type="radio" name="radio[]" value="3">
      <label for="radio3">three</label>
    </li>
    <li>
      <input id="radio4" type="radio" name="radio[]" value="4">
      <label for="radio4">four</label>
    </li>
    <li>
      <input id="radio5" type="radio" name="radio[]" value="5">
      <label for="radio5">five</label>
    </li>
  </ul>

你的工作没有用,因为你在字典上使用for key in myDict: while 'x' in myDict[key]: myDict[key].remove('x') ,而不是在里面的列表中。您需要我使用的.remove()循环,因为while仅删除第一个循环。因此,我只是继续删除第一个,直到没有剩下。

答案 2 :(得分:2)

您的代码中存在一些缺陷:

  1. 您正在字典本身上调用remove,而不是在它具有值的列表上。

  2. 字典没有属性remove

  3. v == 'x'检查是否有任何值等于'x',因为您的所有值都是True,因为您的所有值都是包含的列表 'x'

  4. 即使在列表上调用remove,也只会删除第一次出现的'x'

  5. 最简单的方法是建立一个新词典:

    >>> {k:[x for x in v if x!='x'] for k,v in myDict.iteritems()}
    {0: ['id1', 'id2', 'id3'], 1: ['id1', 'id2'], 2: ['id1']}
    

    您也可以修改字典,只需将值设置为新列表:

    >>> for k,v in myDict.iteritems():
    ...     myDict[k] = [x for x in v if x!='x']
    ... 
    >>> myDict
    {0: ['id1', 'id2', 'id3'], 1: ['id1', 'id2'], 2: ['id1']}
    

    如果您更喜欢功能方法,我在使用列表推导的任何地方都可以使用filter代替。演示:

    >>> filter(lambda x: x!='x', ['id1', 'x', 'x', 'x'])
    ['id1']
    

答案 3 :(得分:1)

对于python2,只需执行:

for k, v in myDict.iteritems():
    if v == 'x':
        myDict[k].remove('x')

问题是您从dict而不是dict元素调用remove方法(myDict [k]]

我认为你使用iteritems()后你会使用Python2。对于python 3,您可以使用不适用于第二版的字典理解。