我正在尝试从大字典中删除所有值'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'
值?
答案 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)
您的代码中存在一些缺陷:
您正在字典本身上调用remove
,而不是在它具有值的列表上。
字典没有属性remove
。
v == 'x'
检查是否有任何值等于'x'
,因为您的所有值都是True
,因为您的所有值都是包含的列表{ em> 'x'
。
即使在列表上调用remove
,也只会删除第一次出现的'x'
。
最简单的方法是建立一个新词典:
>>> {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,您可以使用不适用于第二版的字典理解。