2016-01-23 41 views
1

我觉得这个问题的答案不是很复杂,但我不能为我的生活弄清楚。从字典列表中切出每个字典中的字符串值?

我有一个词典的列表。字典中的键是整数(0, 1, 2)。这些值是包含无关信息的字符串,括号中包含相关信息。我想分割这些字符串,以便括号内的内容是新的值。我想以这种方式更新每个字典,然后将每个字典打包回其列表中。

让我们假设这是我有:

Original = [{1: 'xxx [pear] yyy', 2: 'xxx [apple] zzz'}, {0: 'aaa [cat] yyy', 1: 'bbb [dog] zzz'}] 

这是我希望我的函数返回的内容:

[{1: 'pear', 2: 'apple'}, {0: 'cat', 1: 'dog'}] 

我怎么会去这样做呢?编辑:我知道怎么给字符串如下:

slicev = v.split('[', 1)[1].split(']')[0]

+0

你为什么不直接使用正则表达式? – Chaker

回答

1
def find_between(s, first, last): 
    try: 
     start = s.index(first) + len(first) 
     end = s.index(last, start) 
     return s[start:end] 
    except ValueError: 
     return "" 

original = [{1: "xxx [pear] yyy", 2: "xxx [apple] zzz"}, {0: "aaa [cat] yyy", 1: "bbb [dog] zzz"}] 

for dct in original: 
    for key in dct: 
     dct[key] = find_between(dct[key], "[", "]") 
0

你可以使用正则表达式

import re 
Original = [{1: "xxx [pear] yyy", 2: "xxx [apple] zzz"}, {0:" aaa [cat] yyy", 1: "bbb [dog] zzz"}] 
for item in Original: 
    for key in item: 
     item[key]= re.findall("\[(.*?)\]",item[key])[0] 

print Original 

结果

[{1: 'pear', 2: 'apple'}, {0: 'cat', 1: 'dog'}] 

要注意的是这将改变原始列表。

0

我觉得re模块可以帮助你:

import re 

original = [{1: 'xxx [pear] yyy', 2: 'xxx [apple] zzz'}, 
      {0: 'aaa [cat] yyy', 1: 'bbb [dog] zzz'}] 

data = [{k: re.search(r'\[(.*?)\]', v).group(1) for k, v in d.items()} 
     for d in original]