我是Python的新手,我需要创建一个函数来将字典中列表中的值除以2:
dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
所需输出:
dic2 = {"A":[1,2,3,4], "B":[2,3,4,5]}
我发现了这篇文章
python: iterating through a dictionary with list values
这有一点帮助,但不幸的是,我无法理解示例代码中的“随便”部分。
我试过这个:
def divide(dic):
dic2 = {}
for i in range(len(dic)):
for j in range(len(dic[i])):
dic2[i][j] = dic[i][j]/2
return dic2
我写了不同的变体,但我总是在"for j...“中得到一个KeyError: 0。线路。
发布于 2017-05-24 07:10:05
您必须使用它们的键来访问字典中的元素。在示例中,关键字是'A‘和'B’。您正在尝试使用整数访问字典,这会导致范围错误。
以下函数起作用:
def divide_dic(dic):
dic2 = {}
# Iterate through the dictionary based on keys.
for dic_iter in dic:
# Create a copy of the dictionary list divided by 2.
list_values = [ (x / 2) for x in dic[dic_iter] ]
# Add the dictionary entry to the new dictionary.
dic2.update( {dic_iter : list_values} )
return dic2
发布于 2017-05-24 06:38:37
这是因为dict
不像lists,它们不使用索引,它们使用键(像标签一样),并且您可以使用dict.keys()
来获取dict
的键。
或者,只需使用for in
遍历dict
就可以遍历密钥:
dic = {"A": [2, 4, 6, 8], "B": [4, 6, 8, 10]}
for k in dic: # similar to `for key in dict.keys():`
dic[k] = [x/2 for x in dic[k]]
print(dic)
输出:
{'A': [1.0, 2.0, 3.0, 4.0], 'B': [2.0, 3.0, 4.0, 5.0]}
如果您不需要小数点,请使用//
而不是/
。
发布于 2017-05-24 06:36:02
您不一定要在字典上进行数值迭代-您的range(len(dic))
。(您也不应该以这种方式遍历列表。)这就是dic[i]
不能工作的原因--没有dic[0]
。相反,应该遍历它的键。
def divide(dic):
dic2 = dic.copy()
for key, value in dic:
for i, _ in enumerate(value): # Enumerate gives the index and value.
dic2[key][i] = value[i]/2
return dic2
诚然,理解是一种更好的方法,但这保留了您所做的事情的形式,并说明了问题所在。
https://stackoverflow.com/questions/44146075
复制相似问题