我有一个类似
的列表result =[{'a': 5}, {'b': 4}, {'c': 3}, {'ar': 10}, {'ade': 10}]
现在,我想重新叙述这些词典的价值。例如,“ a”是'ar'
和len(a)/len(ar)=1/2
的子类,因此{'a':5}
变成{'a':5+10/2}
。
此外,“ a”是“ ade”的子字符串,并且len(a)/ len(ade)= 1/3。最后,它应该是{'a':5 + 10/2 + 10/3}。那么如何不用for方法解决这个问题呢?
我发现我可以在上一步中将结果转换为字典,但是我仍然需要使用method。
答案 0 :(得分:0)
result =[{'a': 5}, {'b': 4}, {'c': 3}, {'ar': 10}, {'ade': 10}]
relation = []
valor = {}
for example in range(0, len(result)):
for example2 in list(result[example].keys()):
for examplex in range(0, len(result)):
if examplex != example and example2[0] in list(result[examplex].keys())[0] and list(result[examplex].keys())[0] not in relation:
#print('True')
relation.append(list(result[examplex].keys())[0])
print(list(result[examplex].keys())[0], list(result[examplex].values())[0])
if example2[0] not in valor:
print("No existe, se crea como un valor nuevo.")
valor[example2[0]] = list(result[example].values())[0] + list(result[examplex].values())[0] / len(list(result[examplex].keys())[0])
elif example2 in valor:
print("Existe, se esta modificando.")
valor[example2[0]] += list(result[examplex].values())[0] / len(list(result[examplex].keys())[0])
print(valor[example2[0]])
'''Here you can iterate with for :) valor, 1 hour for do it 0_0'''
答案 1 :(得分:0)
result =[{'a': 5}, {'b': 4}, {'c': 3}, {'ar': 10}, {'ade': 10}]
dd ={}
v=0
for i in result:
key=i.keys()[0]
if key.__contains__('a'):
l=i[key]/len(key)
v = v+l
dd={'a':v}
#dd ={'a': 13}
答案 2 :(得分:0)
使用列表理解
round(number[, ndigits])
-round()方法返回四舍五入到小数点后给定n位数字的浮点数。例如。
result =[{'a': 5}, {'b': 4}, {'c': 3}, {'ar': 10}, {'ade': 10}]
for index,x in enumerate(result):
key = list(x.keys())[0]
# get all key substring dictionary
subtring_value = {list(result[y].keys())[0] : list(result[y].values())[0]
for y in range(index+1,len(result)) if key in list(result[y].keys())[0]}
if len(subtring_value) > 0:
total = list(x.values())[0]
for k,v in subtring_value.items():
total = total + v/len(k)
x[key] = round(total,2)
print(result)
O / P:
[{'a': 13.33}, {'b': 4}, {'c': 3}, {'ar': 10}, {'ade': 10}]
答案 3 :(得分:0)
使用itertools.product
的一种解决方案:
from itertools import product
result = [{'a': 5}, {'b': 4}, {'c': 3}, {'ar': 10}, {'ade': 10}]
out = {}
for v1, v2 in product(result, repeat=2):
i1 = [*v1][0]
i2 = [*v2][0]
if i1 in i2:
out.setdefault(i1, []).append((i2, v2[i2]))
result = []
for k, v in out.items():
s = 0
for (vv, cnt) in v:
s += cnt * (len(k) / len(vv))
result.append({k : s})
print(result)
打印:
[{'a': 13.333333333333332}, {'b': 4.0}, {'c': 3.0}, {'ar': 10.0}, {'ade': 10.0}]
答案 4 :(得分:0)
预期输出不清楚(“ ar”与“ ade”?),但是我建议使用defaultdict中的collections,方法是:
from collections import defaultdict
result =[{'a': 5}, {'b': 4}, {'c': 3}, {'ar': 10}, {'ade': 10}]
res = defaultdict(list)
for h in result:
key = list(h.keys())[0]
val = list(h.values())[0]
key_f = key[0]
size = len(key)
print(size)
res[key_f].append(val/size)
此步骤产生:
defaultdict(<class 'list'>, {'a': [5.0, 5.0, 3.3333333333333335], 'b': [4.0], 'c': [3.0]})
然后将转换值迭代到列表的总和:
for k, v in res.items():
res[k] = sum(v)
print(dict(res))
#=> {'a': 13.333333333333334, 'b': 4.0, 'c': 3.0}