Python:列出字典,替换某些值

Python:列出字典,替换某些值,python,list,dictionary,list-comprehension,python-2.6,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'}] 我想从键3的值中删除前两个数字。我会在列表理解中使用字典理解 字典理解将重建字典,但在以下情况下会更

如何替换列出的字典中特定键的值?但替换应使用条件(即,如果开头有两位数字)。最好能理解列表/字典

例如:

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

我想从键3的值中删除前两个数字。

我会在列表理解中使用字典理解

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

  • 键为
    键3
  • 字符串的前两个字符是数字
改变就是占据主导空间的正确部分

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'}]
注意:如果有两个以上的数字,也将删除第一个数字。条件是广泛的,应该调整到您的需要

编辑:符合Python 2.7之前版本的替代方案(不存在dict理解时):


也许有一种方法可以通过理解来做到这一点,但在我看来,最好更详细一点,以使代码的意图更清楚:

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]

所以我结合了Jean-François Fabre和Tom Lynch的答案,稍微改变了regex模式,得出了以下结论:

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

这正是我想要的。谢谢我在想,我们是否可以用re.sub实现这一点,但无论如何,我都会根据自己的需要进行调整。这在python 2.7.X中有效,但在python 2.6.X中却出现语法错误:(这是因为dict理解还不可用。为替代解决方案进行编辑,应该可以正常工作(给出相同的结果!!)
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