如何替换列出的词典中特定键的值?但是替换应该发生在有条件的情况下(即如果它们在开头有两位数)。最好是列表/字典理解。
示例:
a_list = [{'key1': 'A picture 1', 'key2': 'location 1', 'key3': '20 title1'}, {'key1': 'A picture 2', 'key2': 'location 2', 'key3': '10 title2'}]
我想从key3的值中删除前两位数字。
答案 0 :(得分:1)
我会在列表理解中使用字典理解来做到这一点。
字典理解重建字典,但在以下情况下改变值:
key3
AND 改变正占据领先空间的正确部分。
a_list = [{'key1': 'A picture 1', 'key2': 'location 1', 'key3': '20 title1'}, {'key1': 'A picture 2', 'key2': 'location 2', 'key3': '10 title2'}]
a_new_list = [{k:v.partition(" ")[2] if (k=="key3" and v[:2].isdigit()) else v for k,v in d.items()} for d in a_list]
print(a_new_list)
结果:
[{'key1': 'A picture 1', 'key2': 'location 1', 'key3': 'title1'}, {'key1': 'A picture 2', 'key2': 'location 2', 'key3': 'title2'}]
注意:如果数字超过2位,也会删除第一个数字。条件很广泛,应该根据您的需要进行调整。
编辑:符合Python 2.7标准的替代方案(不存在时的字典理解):
a_new_list = [dict((k,v.partition(" ")[2] if (k=="key3" and v[:2].isdigit()) else v) for k,v in d.items()) for d in a_list]
答案 1 :(得分:1)
可能有一种方法可以通过理解来做到这一点,但在我看来,为了使代码的意图更加清晰,更好的是更加冗长:
import re
for d in a_list:
for k in d:
d[k] = re.sub(r'^\d\d', '', d[k]) if k == 'key3' else d[k]
答案 2 :(得分:0)
所以我结合了Jean-FrançoisFabre和Tom Lynch的答案,稍微修改了正则表达式图案,并提出了这个:
import re
a_new_list = [{k: re.sub(r'^\d{2} ', '', d[k]) if k == "key3" else v for k, v in d.items()} for d in a_list]
print a_new_list