地球化学模型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]
答案 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