【发布时间】:2018-12-15 21:12:32
【问题描述】:
这里是样本数据。输入目录中的所有内容都是动态的。唯一的问题是数据字典将为 input_dict 中的每个键值修复 7 个不同的值。它可能只有 1 或 0 个值。
input_dict = { 'all_val' : ['a', 'b', 'c' ],
'2nd_group' : ['a', 'b'] ,
'3rd_grp' : ['a' , 'c']}
data = {
'a' : [1,0,1,0,0,0,1],
'b' : [0,0,1,1,0,1,0],
'c' : [0,1,1,0,0,0,1] }
required_output = {'2nd_group': 5, '3rd_grp': 4, 'all_val': 6}
逻辑:对于 all_val,取 a 、 b 和 c 并转到数据字典。如果 a[0],b[0],c[0] 中的任何一个为 1,则应考虑 1。 a[1],b[1],c[1] 的方式相同 ...最后计算所有 1 .
我的解决方案:
temp_dict = {}
output_dict = {}
for a in input_dict.keys():
temp_dict[a] = [0]*7
for key, value in input_dict.items():
for v in value:
for j , d in enumerate(data[v]):
temp_dict[key][j] = max( temp_dict[key][j] , d )
for k,v in temp_dict.items():
total = 0
for t in temp_dict[k]:
total = total + t
output_dict[k] = total
print output_dict
有没有办法提高性能或解决这个问题的任何其他方法。
【问题讨论】:
-
您总是可以减少代码量,并像这样一步完成全部编写:
print({k: sum(max(data[key][index] for key in keys) for index in range(7)) for k, keys in input_dict.items()}),但我不确定它是否更具可读性。有些部分可以简化,例如搜索 a、b 和 c 的最大值,或者最后的总和。 -
如果数据字典只包含 7 位,则表示为 7 个元素的列表是雄心勃勃的 - 为什么不使用整数并使用位掩码?
标签: python