循环浏览数据以查找其他列表中的值并将其添加到字典中

时间:2017-03-28 11:07:56

标签: python list dictionary

地球化学模型I的输出使用每步产生3000+步骤,每步产生300种化学物质。

我有一个我感兴趣的物种的价值清单。

如何使用我感兴趣的物种(物种)列表循环数据(主要),然后将相关物种列表的第二个值添加到字典中的键中,而不必为每个物种输出100个if语句if x=='y':list['x'].append(value)

这是我的代码的简化版本:

main =[['a',1,2,3],['b',4,5,6],['c',7,8,9],['a',10,11,12],['b',13,14,15],['c',16,17,18]
species = ['a', 'b', 'c'] 
maindict={'a':[],'b':[],'c':[]}   

for value in main2:
    for x in value:
        if x=='a':maindict['a'].append(value[2])
        elif x=='b':maindict['b'].append(value[2])
        elif x=='c':maindict['c'].append(value[2])

我正在寻找的东西有点简单:

for value in main:
    if value==i for i in species:
        maindict[i].append(value[2])

但显然这并没有真正起作用。

输出:

maindict={'a':[3,12],'b':[6,15],'c':[9,18]

2 个答案:

答案 0 :(得分:1)

你可以遍历main中的每个条目并检查第一个条目是否在maindict中,然后将正确的条目附加到maindict中

main =[['a',1,2,3],['b',4,5,6],['c',7,8,9],['a',10,11,12],['b',13,14,15],['c',16,17,18]]
species = ['a', 'b', 'c'] 
maindict={'a':[],'b':[],'c':[]}


for entry in main:
    if entry[0] in maindict:
        maindict[entry[0]].append(entry[3])
    else:
        maindict[entry[0]] = [entry[3]]

print maindict

>>> {'a': [3, 12], 'c': [9, 18], 'b': [6, 15]}

答案 1 :(得分:0)

有一个dict的意思是避免顺序查找不是吗?

from collections import defaultdict

def collect(source, species):
    result = defaultdict(list)
    for key in species:
        found = source.get(key)
        if found:
            result[key].append(found[2])
    return result


source ={'a':[1,2,3],'b':[4,5,6],'c':[7,8,9], 'd':[0, 0, 0]}
species = ['a', 'b', 'c', 'e'] 

result = collect(source, species)
print result

编辑:好吧所以你的源码实际上并不是dict ...这是一个更新版本工作列表(注意你的源代码应该是一个元组列表,但这是另一个点):

from collections import defaultdict

def collect(source, species):
    result = defaultdict(list)
    for row in source:
        key = row[0]
        if key in species:
            result[key].append(row[2])
    return result


source =[['a', 1,2,3], ['b', 4,5,6],['c', 7,8,9], ['d', 0, 0, 0]}
# a set provides a huge perf improvement over a plain list here  
species = set(['a', 'b', 'c', 'e'])  

result = collect(source, species)
print result