我有一个for循环,它通过多个字典并在公共密钥下添加值。输入字典具有字符串和值为int的键。由于某种原因,它将值添加为一个值(e.g. {"01":[12],[44]})
的列表。我希望它自己添加int,但由于某种原因无法使其工作。我正在使用下面的代码,有什么我想念的吗?
dw = defaultdict()
dw = {}
for key, value in listb.items():
dw[key].append(value)
答案 0 :(得分:0)
如果您想放弃所有良好做法而不使用defaultdict(list)
,您可以使用setdefault
并在每次选择添加值时调用它。这是低效的,不是惯用的,但它会起作用。
In [1]: from collections import defaultdict
In [2]: a = defaultdict(list)
In [3]: b = {}
In [4]: a[1].append(1)
In [5]: b.setdefault(1, []).append(1)
In [6]: a
Out[6]: defaultdict(list, {1: [1]})
In [7]: b
Out[7]: {1: [1]}
In [8]:
答案 1 :(得分:0)
如果你想将键/值对添加到字典中(而不是附加到数组),那就是:
for key, value in listb.items():
dw[key] = value
编辑:或者你之后是这样的吗?
listb = {'1': 3, '2': 5}
dw = {'1': 5, '2': 9}
for key, value in listb.items():
if key not in dw.keys():
dw[key] = []
else:
dw[key] = [dw[key]]
dw[key].append(value)
,提供dw = {'2': [9, 5], '1': [5, 3]}
答案 2 :(得分:0)
只要dicts中的值是整数(不是列表):
dw = {}
for key, value in listb.items():
try: # Key exists in dictionary and value is a list
dw[key].append(value)
except KeyError: # Key does not yet exist in dictionary
dw[key] = value
except AttributeError: # Key exist in dictionary and value is not a list
dw[key] = [dw[key], value]
答案 3 :(得分:0)
如果你有list
listb = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4, 'c': 5}, {'b': 1}]
,可以试试这个:
dw = {}
for d in listb:
for k, v in d.items():
if k in dw:
if isinstance(dw[k], list):
dw[k].append(v)
elif isinstance(dw[k], int):
dw[k] = [dw[k], v]
else:
dw[k] = v
print(dw)
{'a': [1, 3], 'b': [2, 4, 1], 'c': 5}
>>>