[英]trying to save data from a list in a dictionary (in a more pythonic way)
當我嘗試從列表列表中創建字典時,python僅在使用理解時才保存列表中最后一個列表中的信息。
prediction_dict = dict()
for user_prediction in sliding:
for cur_loc, prediction_list in user_prediction:
prediction_dict[(cur_loc.user, cur_loc.time)] = prediction_list
print prediction_dict
如何通過列表理解以更Python的方式實現這一目標?
我試試這個:
prediction_dict = {(cur_loc.user, cur_loc.time): prediction_list for cur_loc, prediction_list in user_prediction for user_prediction in sliding}
但是它只保存列表中最后一個列表的數據嗎?
為什么?
正如其他人提到的那樣,您的理解不起作用,因為需要切換for
語句。 但是,有一個簡單的原因可以說明您的代碼為何執行其所執行的操作。 如果您這樣做:
del(user_prediction) #Ensure we aren't using a previously defined version
prediction_dict = {(cur_loc.user, cur_loc.time): prediction_list for cur_loc, prediction_list in user_prediction for user_prediction in sliding}
然后,您將得到如下錯誤:
NameError: name 'user_prediction' is not defined
所以我猜想當你嘗試的時候,你正在做這樣的事情:
prediction_dict = dict()
for user_prediction in sliding:
for cur_loc, prediction_list in user_prediction:
prediction_dict[(cur_loc.user, cur_loc.time)] = prediction_list
print prediction_dict
prediction_dict = {(cur_loc.user, cur_loc.time): prediction_list for cur_loc, prediction_list in user_prediction for user_prediction in sliding}
print prediction_dict
如果您打印的價值user_prediction
后for
循環和理解之前,你會發現它是指在最后一項sliding
。 這不會有問題,除了從NameError
我們看到的那樣,您所擁有的理解力試圖使用舊值而不是您想要賦予的新值。 幕后發生的事情是這樣的:
prediction_dict = {}
loop_one_input = user_prediction
for cur_loc, prediction_list in loop_one_input:
loop_two_input = sliding
for user_prediction in loop_two_input:
prediction_dict[(cur_loc.user, cur_loc.time)] = prediction_list
如您所見,在將user_prediction
重新分配給新值時(在內部for
循環中),外部for
循環已在使用舊值。 這不完全是正在發生的事情,但是希望它能給您一個足夠好的主意,以了解您的字典理解為何無法正常工作。
當將嵌套的for循環轉換為嵌套列表理解時,外部循環需要首先出現,因此看起來您只需要在理解內切換迭代的順序即可(為清楚起見,分成多行:
prediction_dict = {(cur_loc.user, cur_loc.time): prediction_list
for user_prediction in sliding
for cur_loc, prediction_list in user_prediction}
您幾乎已經明白了,在理解中更改for語句的順序:
prediction_dict = {(cur_loc.user, cur_loc.time): prediction_list
for user_prediction in sliding
for cur_loc, prediction_list in user_prediction}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.