2017-07-24 81 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