遍历python字典中的列表

car*_*e71 3 python dictionary

我对 Python 非常陌生,我需要创建一个函数,将字典中列表中的值除以 2:

dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
Run Code Online (Sandbox Code Playgroud)

所需的输出:

dic2 = {"A":[1,2,3,4], "B":[2,3,4,5]}
Run Code Online (Sandbox Code Playgroud)

我找到了这个帖子

python:遍历具有列表值的字典

这有点帮助,但不幸的是我无法弄清楚示例代码的“任何”部分。

我试过这个:

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
Run Code Online (Sandbox Code Playgroud)

我写了不同的变体,但我一直在“for j...”行中收到 KeyError: 0 。

wim*_*wim 5

看哪,理解的力量:

>>> dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
>>> dic2 = {k:[v/2 for v in vs] for k,vs in dic.items()}
>>> dic2
{'A': [1, 2, 3, 4], 'B': [2, 3, 4, 5]}
Run Code Online (Sandbox Code Playgroud)

外部级别有一个字典理解,以及一个用于划分每个列表中的值的“内部”列表理解。


MrG*_*eek 5

那是因为dicts 不像列表,它们不使用索引,它们使用键(如标签),并且您可以使用它dict.keys()来获取 adict的键。

或者,只需循环dict使用 usingfor in循环键:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

{'A': [1.0, 2.0, 3.0, 4.0], 'B': [2.0, 3.0, 4.0, 5.0]}
Run Code Online (Sandbox Code Playgroud)

如果您不想要那个小数点,请使用//代替/