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

问题描述 投票:1回答:3

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

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建议解决方案

python
3个回答
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
投票

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

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

0
投票

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

dict = {}
for n in n1:
    if # condition #
        if key not in dict:
            dict[key] = []
        dict[key].append(value)
        print dict
© www.soinside.com 2019 - 2024. All rights reserved.