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