2017-02-19 99 views
1

如何從列出的字典中的特定鍵替換值?但是替換應該在有條件的情況下發生(即如果它們在開始時有兩位數字)。最好用列表/字典解釋。Python:列出的字典,替換某些值

實施例:

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

我想從KEY3的值除去前兩個數字。

回答

1

我會這樣做,在列表理解中使用字典理解。

的字典解析重建詞典,但改變了值,如果:

  • 關鍵是key3
  • 第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] 
+0

這正是我所期待的。謝謝。我在想如果我們可以用re.sub來做到這一點,但無論如何我會根據我的需求來調整。 – Twilight0

+0

這可以在python 2.7.X中使用,但是我在python 2.6.X中得到語法錯誤:( – Twilight0

+1

這是因爲dict理解還沒有提供,編輯替代解決方案,應該工作正常(給出相同的結果!!) –

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] 
0

所以我結合讓·弗朗索瓦·法布爾的和湯姆·林奇的回答,稍微改變正則表達式圖案以及與此想出了:

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