我在这里做了意大利面条代码的母亲。这应该通过指定哪个(因子1,因子2)然后根据修剪器是什么来修剪不可乘法的结果(如果修剪为1)来将两个字典(kv1和kv2)的键和/或值相乘(例如0)或[])。
所以,这就是我要做的事情:
找出一种更简单的方法,将factor1和factor2分配给适当的k1 / k2 / v1 / v2
尝试正确压缩,因为adsVal
是包含列表的字典,而valSet是包含字符串的字典。
尝试将每个列表中的值乘以valSet
中各自的字符串(因此adsVal
中每个列表中的值5将乘以{{1}的第五个值})
弄清楚如何将所有不能相乘的东西(即任何不能为int()的字符串)转换为修剪器(例如0)或至少将其与其键一起删除
代码是:
valSet
任何事都会做,我只是想学习。感谢。
示例输入:
def multDict(kv1, kv2, factor1, factor2, pruning, pruner):
# This multiplies something in two dictionaries
# With pruning on, null values become the pruner
if factor1 == 'k1':
factor1 = kv1.keys()
elif factor1 == 'k2':
factor1 = kv2.keys()
elif factor1 == 'v1':
factor1 = kv1.values()
elif factor1 == 'v2':
factor1 = kv2.values()
if factor2 == 'k1':
factor2 = kv1.keys()
elif factor2 == 'k2':
factor2 = kv2.keys()
elif factor2 == 'v1':
factor2 = kv1.values()
elif factor2 == 'v2':
factor2 = kv2.values()
x3 = []
for x1 in factor1:
zipped = zip(x1, factor2)
for y1, x2 in zipped:
printtxt(x2)
try:
int(y1)
int(x2)
except:
pass
else:
print(int(y1)*int(x2))
return x3
print(multDict(adsVal, valSet, 'v1', 'v2', 1, 0))
示例输出:
adsVal = {'Students': ['inactive', '3'], 'Campaign 1': ['not_delivering', '']}
valSet = {'Delivery': [''], 'Results': ['1000']}
答案 0 :(得分:1)
import collections
def mul_maybe_ints(a, b, pruner=None):
try:
return int(a)*int(b)
except ValueError:
return pruner
def strings_times_strings(aa, ab, pruner=None):
return [mul_maybe_ints(a, b, pruner) for a,b in zip(aa,ab)]
def lists_times_strings(aa, sa, pruner=None):
return [[mul_maybe_ints(el, s, pruner) for el in a] for a,s in zip(aa,sa)]
# example usage
adsVal = collections.OrderedDict()
adsVal['Students'] = ['inactive', '3']
adsVal['1'] = ['not_delivering', '']
valDict = collections.OrderedDict()
valDict['Delivery'] = '50'
valDict['Results'] = '1000'
result = lists_times_strings(adsVal.values(), valDict.values(), 0)
print( result ) # [[0, 150], [0, 0]]
print( { k : v for k,v in zip(adsVal, result) } ) # {'Students': [0, 150], '1': [0, 0]}
print( strings_times_strings(adsVal.keys(), valDict.values(), 0) ) # [0, 1000]
一些注意事项:
OrderedDict