my_dicts = [
{ 'key1' : 'value1',
'key2' : 'value2' },
{ 'key1' : 'value1',
'key2' : 'value2' },
{ 'key1' : 'value1',
'key2' : 'value2' }]
將'value2'的所有實例替換爲'value3'的最有效方法是什麼?編輯詞典列表中的值?
my_dicts = [
{ 'key1' : 'value1',
'key2' : 'value2' },
{ 'key1' : 'value1',
'key2' : 'value2' },
{ 'key1' : 'value1',
'key2' : 'value2' }]
將'value2'的所有實例替換爲'value3'的最有效方法是什麼?編輯詞典列表中的值?
我沒有做任何時刻,但你可能無法得到更好的比
for d in my_dicts:
d.update((k, "value3") for k, v in d.iteritems() if v == "value2")
更新Python3
for d in my_dicts:
d.update((k, "value3") for k, v in d.items() if v == "value2")
編輯:
或者。
for item in my_dicts:
my_dict[item]['key2'] = 'value3'
下面是一個非常普遍的答案,旨在處理大型詞典中多個值的多次出現。處理更簡單的更具體的案例和/或小字典 - 比如你的例子 - 可以更快地完成。
from collections import defaultdict
my_dicts = [
{ 'key1' : 'value1',
'key2' : 'value2' },
{ 'key1' : 'value1',
'key2' : 'value2',
'key3' : 'value2' }, # dup added for testing
{ 'key1' : 'value1',
'key2' : 'value2' }]
def reverse(dct):
""" Create dictionary mapping each value to list of one or more keys """
ret = defaultdict(list)
for key,val in dct.iteritems():
ret[val].append(key)
return ret
def replace_values(dicts, replacments):
""" Replace values in each dict in dicts """
for dct in dicts:
revdict = reverse(dct)
for oldval,newval in replacments.iteritems():
for key in revdict.get(oldval, []):
dct[key] = newval
replace_values(my_dicts, {'value2':'value3'})
print my_dicts
# [{'key2': 'value3', 'key1': 'value1'},
# {'key3': 'value3', 'key2': 'value3', 'key1': 'value1'},
# {'key2': 'value3', 'key1': 'value1'}]
正在尋找'value2'在不同'keyX'內?您將執行多少次更新,每次遍歷只有一次? – kevpie 2010-11-27 12:23:34
可以做出什麼假設 - 就像它總是與同一個關鍵字相關聯,或者它可能出現在其他或多個關鍵字下?你會想要一次更新多個值嗎? – martineau 2010-11-27 12:31:01