首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中遍历字典内的列表

在python中遍历字典内的列表
EN

Stack Overflow用户
提问于 2017-05-24 06:29:54
回答 6查看 14.1K关注 0票数 3

我是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。线路。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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
票数 2
EN

Stack Overflow用户

发布于 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]}

如果您不需要小数点,请使用//而不是/

票数 5
EN

Stack Overflow用户

发布于 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

诚然,理解是一种更好的方法,但这保留了您所做的事情的形式,并说明了问题所在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44146075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档