![](/img/trans.png)
[英]Add values from list to a list of dicts (as new key-val in each dict)
[英]Slicing string values in each dict from list of dicts?
我觉得这个问题的答案不是很复杂,但是我一生都无法解决。
我有一个字典清单。 字典中的键是整数(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]
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], "[", "]")
您可以使用正则表达式
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'}]
请注意,这将更改原始列表。
我认为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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.