Python:列出的词典,替换某些值

时间:2017-02-19 21:03:30

标签: python list dictionary list-comprehension python-2.6

如何替换列出的词典中特定键的值?但是替换应该发生在有条件的情况下(即如果它们在开头有两位数)。最好是列表/字典理解。

示例:

a_list = [{'key1': 'A picture 1', 'key2': 'location 1', 'key3': '20 title1'}, {'key1': 'A picture 2', 'key2': 'location 2', 'key3': '10 title2'}]

我想从key3的值中删除前两位数字。

3 个答案:

答案 0 :(得分:1)

我会在列表理解中使用字典理解来做到这一点。

字典理解重建字典,但在以下情况下改变值:

  • 键是key3 AND
  • 字符串的前2个字符是数字

改变正占据领先空间的正确部分。

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