将值附加到for循环中的字典

时间:2017-02-01 02:34:00

标签: python

不能让这个工作。任何帮助都非常感谢。

dict = {}
for n in n1:
    if # condition #
        dict[key] = []
        dict[key].append(value)
        print dict

这是打印类似的东西

  

{' k1':[' v1']}和{' k1':[' v2']}

我在此代码中没有其他几个嵌套for循环,这将使用此dict并且dict只有最新的键值对,即{'k1':'v2'}

我正在寻找像{'k1':['v1','v2']}

这样的东西

请不要使用setdefault

建议解决方案

3 个答案:

答案 0 :(得分:3)

尝试Collections.defaultdict

#example below is in the docs.
from Collections import defaultdict

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
    d[k].append(v)

sorted(d.items())
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

默认情况下,d = defaultdict(list)行将键值设置为空字典,并将值附加到循环中的列表中。

答案 1 :(得分:1)

代码的问题是,每次for循环运行时,它都会为“ key”创建一个空列表。您只需要对代码进行一项改进:

dict = {}
dict[key] = []
for n in n1:
   if # condition #
       dict[key].append(value)
       print dict

答案 2 :(得分:0)

您还可以在分配前检查密钥是否存在。

dict = {}
for n in n1:
    if # condition #
        if key not in dict:
            dict[key] = []
        dict[key].append(value)
        print dict