[英]Iterating through key value pairs in a python dictionary to build an list of objects
[英]Error while iterating list to put those into a key value pairs in python
我是python的新手。 我有一個python列表old_ecim_mims_list,如下所示:-
['ReqSyncPort_v2_5_0', 'ECIM_SwM_v2_1_0_2_2', 'ECIM_SwM_v3_0_0_2_3', 'ResPowerDistribution_v1_0_0', 'ECIM_SwM_v4_2_0_3_2', 'ResPowerDistribution_v3_4_1', 'LratBb_v1_8025_0']
現在,我的要求是在這里對其進行迭代,並將其放入像下面的鍵值對結構這樣的映射中:-
ReqSyncPort=ReqSyncPort_v2_5_0
ECIM_SwM=ECIM_SwM_v2_1_0_2_2,ECIM_SwM_v3_0_0_2_3,ECIM_SwM_v4_2_0_3_2
ResPowerDistribution=ResPowerDistribution_v1_0_0,ResPowerDistribution_v3_4_1
LratBb=LratBb_v1_8025_0
我已經為此完成了一個示例程序,但是執行時出現錯誤:-
old_ecim_mims_map={} ;
for index , item in enumerate(old_ecim_mims_list) :
print(index , item ) ;
split_str=item.split("_v");
#print(split_str[0]);
if split_str[0] in old_ecim_mims_map :
new_prop_map[split_str[0]].append(item);
#old_ecim_mims_map.update({split_str[0]:item }) ;
else :
old_ecim_mims_map[split_str[0]]=item ;
錯誤:-
Traceback (most recent call last):
File "F:/DeltaProject/com/dash/abinash/DeltaOperation/Createdelta.py", line 50, in <module>
new_prop_map[split_str[0]].append(item);
AttributeError: 'str' object has no attribute 'append'
向我建議我在哪里做錯了。搜索了很多概念,但是這些對我沒有太大幫助。任何幫助將不勝感激。
您的代碼失敗,是因為您在字典(map)中添加了一個字符串作為值,而不是將其包含在[]
以在最后一行( old_ecim_mims_map[split_str[0]]=item
)中創建一個數組。 下次遇到相同的鍵時,您嘗試附加到字符串,而不是數組。
您需要做的(並設法做的)是首先檢查地圖中是否已存在某個鍵。 如果是的話,那么您可以追加到列表old_ecim_mims_dict[key]
。 如果沒有這樣的鍵,將引發KeyError
,然后您必須創建新列表並將el
放入其中。
old_ecim_mims_list = ['ReqSyncPort_v2_5_0', 'ECIM_SwM_v2_1_0_2_2', 'ECIM_SwM_v3_0_0_2_3', 'ResPowerDistribution_v1_0_0', 'ECIM_SwM_v4_2_0_3_2', 'ResPowerDistribution_v3_4_1', 'LratBb_v1_8025_0']
old_ecim_mims_map = {}
for el in old_ecim_mims_list:
key, _ = el.split('_v')
try:
old_ecim_mims_map[key].append(el)
except KeyError:
old_ecim_mims_map[key] = [el]
此代碼更加簡潔。 如果要重寫代碼,只需將最后一行更改為
old_ecim_mims_map[split_str[0]]=[item]
編輯:如評論中所建議,盡管我不喜歡這樣做,但可以通過檢查key
是否在地圖中來完成:
old_ecim_mims_list = ['ReqSyncPort_v2_5_0', 'ECIM_SwM_v2_1_0_2_2', 'ECIM_SwM_v3_0_0_2_3', 'ResPowerDistribution_v1_0_0', 'ECIM_SwM_v4_2_0_3_2', 'ResPowerDistribution_v3_4_1', 'LratBb_v1_8025_0']
old_ecim_mims_map = {}
for el in old_ecim_mims_list:
key, _ = el.split('_v')
if key in old_ecim_mims_map: # The same as if key in old_ecim_mims_map.keys()
old_ecim_mims_map[key].append(el)
else:
old_ecim_mims_map[key] = [el]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.