2017-07-24 83 views
0

即時貼牆,即時消息緩緩陷入絕望。不能將多個對象添加到列表中鍵入字典值

我有以下結構(我們稱之爲event_dict):

{ 
    'ABC123':[], 
    'ABC234':[], 
    'ABC444':[] 
} 

和這樣的事情(我們稱之爲一個EVENT_LIST):

[ 
    {'code':ABC123, 'data':'some data' }, 
    {'code':ABC234, 'data':'some data' } 
    {'code':ABC234, 'data':'some data' } 
] 

我試着去推事件的數據在我的事件字典中列出。我使用event_list ['code']來確定哪個事件必須基於它的鍵被添加到event_dict中。

下面是我寫的代碼:

for event in event_list : 


    /* some processing here */ 

    for motherEvent in event_dict : 
    if motherEvent.keys()[0] == event['code']: 
     event_dict[motherEvent.keys()[0]].append(event) 

     /* also tried this : 
     motherEvent.append(event) and got : 
     list indices must be integers, not dict */ 

但我得到這個錯誤:list indices must be integers, not unicode

有些事情我沒有變,但我看不出有什麼\

有更好的方法?我只是試圖根據他們的'code'在一個更高的結構中對一系列的字典進行分組。

+6

不要在Python代碼中使用C風格的註釋。使用* Python註釋*。 –

+2

大概是這樣的:'motherEvent.keys()[0]'不會總是給你你想要的。字典是無序的數據結構。 –

回答

2

我定你所提供的數據:

event_dict = { 
    'ABC123':[], 
    'ABC234':[], 
    'ABC444':[]} 

event_list = [ 
    {'code': 'ABC123', 'data':'some data' }, 
    {'code': 'ABC234', 'data':'some data' }, 
    {'code': 'ABC234', 'data':'some data' }] 

你可以這樣做:

for el in event_list: 
    event_dict[el['code']].append(el['data']) 

,你會得到以下結果:

{'ABC123': ['some data'], 'ABC444': [], 'ABC234': ['some data', 'some data']} 

無需窩你的循環。如果可以,儘量避免嵌套循環。

+0

我需要檢查event_list是否與event_list ['code']匹配,所以我沒有選擇循環到這2個結構中。 我已經編輯了我的帖子之前你的評論,所以我相信你沒有看到它,但這段代碼給我的錯誤:列表索引必須是整數,而不是字典 –

+0

你不需要檢查密鑰已經在爲你做這件事了。 「我正在使用event_list ['code']來確定哪個事件必須被附加到event_dict中,基於它的關鍵字。」 <----這就是以上所做的。 – JClarke

+0

你不需要一個if語句,如果它拋出然後處理它!你有其他條款,否則它不匹配?包含if語句有什麼好處?我很好奇,也許我錯過了一些東西?並且'event_list'的值需要是一個字符串,並且缺少一個逗號。 – JClarke