我不知道我用這個合適的術語---我可以稱之爲合併操作?簡單的匹配?在Python中做對應替換操作的更快方法?
我有兩本詞典。其中一個包含標籤ID列表。另一個是標籤ID和標籤ID名稱之間的對應關係。我想匹配ID並在第一個字典中包含標籤名稱。
因此,首先字典是這樣的:
>>> myjson
[
{"tags" : ["1","3"],"otherdata" : "blah"},
{"tags" : ["2","4"],"otherdata" : "blah blah"}
]
二字典是這樣的:
>>> tagnames
[
{"id": "1", "name":"bassoon"},
{"id": "2", "name":"banjo"},
{"id": "3", "name":"paw paw"},
{"id": "4", "name":"foxes"}
]
要與標籤ID名稱替換myjson標籤ID,我目前做這:
data = []
for j in myjson:
d = j
d['tagnames'] = [i['name'] for i in tagnames for y in d['tags'] if y==i['id']]
data.append(d)
我所需的輸出是這樣的:
>>> data
[
{"tags" : ["1","3"],"otherdata" : "blah", "tagname" : ["bassoon","paw paw"]},
{"tags" : ["2","4"],"otherdata" : "blah blah", "tagname": ["banjo","foxes"]}
]
我得到正確的輸出,但它似乎很慢。我知道它每次都在對myjson中的每個元素進行完整迭代x標記名中的每個元素的全部迭代(是mxn?nxn?),而且這樣做會很慢,但也許會有更聰明的語法或技巧來加速它?只走陣列一次而不是n次?
如果有人可以建議一種方法來完成這個任務,使用一個漂亮的地圖或功能方法而不是外部forloop,那麼Oooh也會很酷。
'd [ '標記名']'已經改變了'myjson'結構*中的*。沒有必要創建一個新的數據列表。 'd = j'只是指定一個引用,字典是**不**複製的。 – 2013-05-10 14:15:27
哇,真的嗎?讓人驚訝。好的,那應該開始加速,但是我擔心我會搞亂我的舊數據。 – Mittenchops 2013-05-10 14:19:03