我有一个字典,如:
d=[{'court': 4, 'hope': 6},
{'court': 9, 'hope': 27},
{'hope': 5, 'mention': 2, 'life': 10, 'bolster': 1, 'internal': 15, 'level': 1}]
并列出
l=[2, 9, 5]
所有我想用对应的字典值划分列表元素。
new_list=[{'court': 2, 'hope': 3},
{'court': 1, 'hope': 3},
{'hope': 1, 'mention': 0.4, 'life': 2, 'bolster': 0.2, 'internal': 3,'level': 0.2}]
我所做的,
new_list=[]
for i in d:
for k,j in i.items():
new={k:j/o for o in l}
new_list.append(new)
它作为带有单个元素的列表返回:
[{'court': 2},{'hope': 3},
{'court': 1},{'hope': 3},
{'hope': 1},{'mention': 0.4},{'life': 2},{'bolster': 0.2},{'internal': 3},{'level': 0.2}]
答案 0 :(得分:3)
具有简单的列表/字典理解:
res = [{k: v/divider for k,v in d[i].items()} for i, divider in enumerate(l)]
print(res)
输出:
[{'court': 2.0, 'hope': 3.0}, {'court': 1.0, 'hope': 3.0}, {'hope': 1.0, 'mention': 0.4, 'life': 2.0, 'bolster': 0.2, 'internal': 3.0, 'level': 0.2}]
或与zip
函数相同:
res = [{k: v/divider for k,v in d.items()} for d, divider in zip(d, l)]
答案 1 :(得分:0)
1。艰难的方式(最容易理解的方式)
for i in range(len(l)):
for key, value in d[i].items():
val = value / l[i]
if val.is_integer():
d[i][key] = int(val)
else:
d[i][key] = val
print(d)
2。使用zip()
python Built-in Functions
d = [{key: (int(value/divider) if (value/divider).is_integer() else value/divider) for key,value in d.items()} for d, divider in zip(d, l)]
print(d)
3。使用enumerate()
python Built-in Functions
d = [{key: (int(value/divider) if (value/divider).is_integer() else value/divider) for key,value in d[i].items()} for i, divider in enumerate(l)]
print(d)
这3种方法可以为您提供预期的输出:
[{'court': 2, 'hope': 3},
{'court': 1, 'hope': 3},
{'hope': 1, 'mention': 0.4, 'life': 2, 'bolster': 0.2, 'internal': 3, 'level': 0.2}]