2

Python新手在这里。我有一个列表字典,如下所示:

d = {
  1: ['foo', 'foo(1)', 'bar', 'bar(1)'],
  2: ['foobaz', 'foobaz(1)', 'apple', 'apple(1)'],
  3: ['oz', 'oz(1)', 'boo', 'boo(1)']
}

我试图弄清楚如何遍历字典的键和相应的列表值,并使用括号尾部删除每个列表中的所有字符串。到目前为止,这就是我所拥有的:

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 值的信息。设置它的最有效方法是什么?

4

3 回答 3

8

您可以重新构建字典,只让不带括号的元素通过:

d = {k:[elem for elem in v if not elem.endswith(')')] for k,v in d.iteritems()}
于 2013-04-11T13:02:00.883 回答
1
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 ,如果在其中找到括号尾,则从原始列表中删除相应的元素。

于 2013-04-11T13:06:05.787 回答
1

或者,您可以在不重建字典的情况下执行此操作,如果它很大,这可能会更好......

for k, v in d.iteritems():
   d[k] = filter(lambda x: not x.endswith(')'), v)
于 2013-04-11T13:09:52.673 回答