在for循环中向字典添加值

13

我只是无法让这个工作起来。非常感谢您的任何帮助。

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

这会打印出像这样的内容

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

在此代码中,我有几个其他嵌套的for循环,它们将使用这个字典,而字典仅具有最新的键值对,即 {'k1':'v2'}

我正在寻找类似于{'k1':['v1','v2']}的解决方案

请提供一个不使用setdefault的解决方案。

5个回答

12

你可以在分配之前检查键是否存在。

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

这个答案帮助我解决了一整天的问题。非常感谢你。 - zelfde

7

试试使用 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)

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

d = defaultdict(list)这行代码是将键值默认设置为空字典,并在循环中将值附加到列表中。


当我在我的字典中尝试使用d = defaultdict(list)时,它会在s的行中给出错误,说ValueError: not enough values to unpack (expected 2, got 0)。我的字典看起来像这样:{'branch': {'NumberOfTimes': 4, 'Score': 34}, 'transfer': {'NumberOfTimes': 1, 'Score': 5}, 'deal': {'NumberOfTimes': 2, 'Score': 10}, ... }。你知道问题出在哪里吗?我尝试过d = defaultdict(dict),但也没有解决问题。 - Kristada673
你的外部结构是一个字典。每个键的值都应该是“列表”类型。现在,你的每个值也是一个字典。但由于列表中有需要顺序或名称的内容,我建议创建一种名为“namedTuple”的类型来存储“numberOfTimes”和“Score”,然后创建一个dd = defaultdict(my_namedtuple)。 - Back2Basics

3
代码存在的问题是每次for循环运行时都会创建一个空列表“key”。您需要对代码进行一个改进:
dict = {}
dict[key] = []
for n in n1:
   if # condition #
       dict[key].append(value)
       print dict

0
a=[['a',1],['b',2],['c',1],['a',2],['b',3],['a',3]]
d={}
for i in a:
    print (i)
    if i[0] not in d:
       d[i[0]]= [i[1]]
    else:
        d[i[0]].append(i[1])
print (d)



OP : {'a': [1, 2, 3], 'b': [2, 3], 'c': [1]}

2
你能解释一下这是如何解决问题的吗? - SyntaxVoid
首先创建一个空字典,在for循环中获取给定的列表,然后检查键是否在字典中,如果是,则追加值,否则创建一个新的键值对。 - PRASAD

0
你可以在循环中使用try except块。
another_dict = {}

for key, value in example_dict.items():
    try:
        another_dict[key].append(value)
    except:
        another_dict[key] = list(value)

简单明了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接