How to iterate through dict values containing lists and remove items?
Python新手在这里。 我有一个列表字典,如下:
1 2 3 4 5 | d = { 1: ['foo', 'foo(1)', 'bar', 'bar(1)'], 2: ['foobaz', 'foobaz(1)', 'apple', 'apple(1)'], 3: ['oz', 'oz(1)', 'boo', 'boo(1)'] } |
我试图弄清楚如何循环字典的键和相应的列表值,并删除列表中的每个字符串与parantheses尾部。 到目前为止,这就是我所拥有的:
1 2 3 4 | for key in keys: for word in d[key]...: # what else needs to go here? regex = re.compile('\w+\([0-9]\)') re.sub(regex, '', word) # Should this be a".pop()" from list instead? |
我想用列表理解来做这个,但正如我所说,我找不到有关循环通过dict键和列表的相应dict值的更多信息。 设置它的最有效方法是什么?
您可以重新构建字典,只允许没有括号的元素:
1 | d = {k:[elem for elem in v if not elem.endswith(')')] for k,v in d.iteritems()} |
或者,您可以在不重建字典的情况下执行此操作,如果字典庞大,则可能更为可取。
1 2 | for k, v in d.iteritems(): d[k] = filter(lambda x: not x.endswith(')'), v) |
1 2 3 4 5 | temp_dict = d for key, value is temp_dict: for elem in value: if temp_dict[key][elem].find(")")!=-1: d[key].remove[elem] |
迭代时不能编辑列表,因此您可以创建列表的副本作为temp_list,如果在其中找到括号尾,则从原始列表中删除相应的元素。