迭代python中字典中的列表

时间:2017-05-23 22:29:54

标签: python dictionary

我是Python新手,我需要创建一个函数,将字典中列表中的值除以2:

  choice = getchar();
} while ( choice != 'y' );

期望的输出:

if (sc2.charAt(0) != chr){ String[] parts = sc2.split(" ");
String[] parts2 = parts[1].split("=\"");
String[] parts3 = sc2.split(">");
nod = new Nod(parts2[1].substring(0, parts2[1].length() - 2), parts[0], parts3[1]);
// ar = new ArrayList<DefaultMutableTreeNode>();
for (int i = 0; i < nod.getDepth(); i++){ ar.add(nod); } }

我找到了这篇文章

python: iterating through a dictionary with list values

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

我试过了:

dic = {"A":[2,4,6,8], "B":[4,6,8,10]}

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

7 个答案:

答案 0 :(得分:3)

看,理解的力量

>>> 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]}

在外层有一个词典理解,而在内心层面有一个&#34;内部&#34; list comprehension用于划分每个列表中的值。

答案 1 :(得分:3)

那是因为dicts不像列表,它们不使用索引,它们使用键(如标签),并且有一个Python函数可以获取dict键(dict.keys()),编辑:(我'我现在正在使用 } } 的常规Python迭代,所以:

in

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

答案 2 :(得分:2)

您不一定要在字典上进行数字迭代 - 您的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

不可否认,理解是一种更好的方法,但这会保留你所做的形式,并说明问题所在。

答案 3 :(得分:2)

要轻松迭代字典,请使用字典中的键。使用列表理解

可以轻松地将列表除以2
for k in dic1:
    dic1[k] = [x / 2 for x in dic1[k]]

以函数形式

def divdict(d):
    for k in d:
        d[k] = [x/2 for x in d[k]]

答案 4 :(得分:2)

您必须使用密钥访问字典的元素。 在示例中,键是'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

答案 5 :(得分:1)

您可以尝试使用lambda:

the_funct = lambda x: x/2

dic = {"A":[2,4,6,8], "B":[4,6,8,10]}

new_dict = {a:map(the_funct, b) for a, b in dic.items()}
## for Python 3.5
new_dict = {a:[*map(the_funct, b)] for a, b in dic.items()}

lambda函数与map结合使用,map将迭代函数对字典值中的每个元素进行迭代。通过使用dict理解,我们可以将lambda应用于每个值。

答案 6 :(得分:0)

我在上面使用了Wim答案的细微变化(重点是对使用key的理解):

dic = {"A":[2,4,6,8], "B":[4,6,8,10]}
dic2 = {k:[v/2 for v in dic[k]] for k in dic.keys()}

获得:

dic2
{'A': [1.0, 2.0, 3.0, 4.0], 'B': [2.0, 3.0, 4.0, 5.0]}