从dicts列表中的每个dict中切换字符串值?

时间:2016-01-23 23:19:08

标签: python dictionary

我觉得这个问题的答案并不复杂,但我不能为我的生活弄明白。

我有一个词典列表。字典中的键是整数(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]

3 个答案:

答案 0 :(得分: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], "[", "]")

答案 1 :(得分: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'}]

请注意,这将更改原始列表。

答案 2 :(得分: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]