簡體   English   中英

迭代列表以將其放入python中的鍵值對時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM