在对值进行一些计算之后,从现有字典创建新字典

2024-06-26 14:49:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下列词典。你知道吗

myD = {0: [1,2,3,4], 2: [2,3,4,5], 3: [3,4,5,6]}

我需要创建一个新的字典(或更新当前字典),方法是使用下面列表中的数字来划分值(列表)

deviders = [2,4,8]

预期输出(伪)—>

newD = {0: [1,2,3,4]/2, 2: [2,3,4,5]/4, 3: [3,4,5,6]/8}

有没有一个优雅的方法来做这个计算和创建一个新的字典?你知道吗


Tags: 方法gt列表字典数字词典newdmyd
3条回答

你可以用字典来理解。首先把你的键映射到除法因子。然后用列表理解法将列表中的每个元素分开。你知道吗

div_map = {0: 2, 2: 4, 3: 8}
# or div_map = dict(zip(sorted(myD), (2, 4, 8)))

newD = {k: [i / div_map[k] for i in v] for k, v in myD.items()}

您尝试的语法类似于第三方库NumPy:

import numpy as np

newD = {k: np.array(v) / div_map[k] for k, v in myD.items()}

这是我对你的问题的看法,希望对你有所帮助

def div(d, my_dict):
  count = 0
  for k, v in my_dict.items():
    my_dict[k] = [num/d[count] for num in v]
    count +=1
  return my_dict

myD = {0: [1,2,3,4], 2: [2,3,4,5], 3: [3,4,5,6]}
dividers = [2,4,8]
print(div(dividers, myD))

考虑到按键之间的交错间隔,您可以使用以下方法:

from __future__ import division

d = {0: [1,2,3,4], 2: [2,3,4,5], 3: [3,4,5,6]}
dividers = [2,4,8]

new = dict((k, [i / j for i in d[k]]) for k, j in zip(sorted(d), dividers))

# {0: [0.5, 1.0, 1.5, 2.0],
#  2: [0.5, 0.75, 1.0, 1.25],
#  3: [0.375, 0.5, 0.625, 0.75]}

在Python<;3.7中,对字典的键进行排序可能是个好主意,因为它们的顺序不能保证与dividers对齐。这导致需要使用d[k]而不是.items()/.iteritems()来迭代字典。你知道吗

相关问题 更多 >