在for循环中追加字典

时间:2019-03-05 06:29:33

标签: python python-3.x dictionary for-loop

我想在一个for循环中附加字典,以便获得串联的字典。另外,所有字典的键也不必完全相同。

对于eq

 one={'a': '2', 'c': 't', 'b': '4'}
 two={'a': '3.4', 'c': '7.6'}
 three={'a': 1.2, 'c': 3.4, 'd': '2.3'}

输出:

combined={'a':['2','3.4','1.2'],'b':'4','c':['t','7.6','3.4'],
                'd':'2.3'}

现在是原始问题:

每次for循环迭代时,都会生成一个字典,我想附加它。

类似的东西:

 emptydict={}

   for x in z:
      newdict=x.dict()
      emptydict.append(newdict)
      print(emptydict)

4 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情。

{'a': ['2', '3.4', 1.2], 'c': ['t', '7.6', 3.4], 'b': ['4'], 'd': ['2.3']}

输出for-loop

答案 1 :(得分:1)

您可以尝试dict-comprehension和list-comprehension:

new_dict = {k : [j[k] for j in [one,two,three] if k in j] for k in set(list(one.keys())+list(two.keys())+list(three.keys())
# Output : { 'a': ['2', '3.4', 1.2], 'b': ['4'], 'c': ['t', '7.6', 3.4], 'd': ['2.3']}

如果您希望仅将一个元素作为可能的值的键不在列表中,请尝试以下操作:

new_dict =  a = {k : [j[k] for j in [one,two,three] if k in j][0] if len([j[k] for j in [one,two,three] if k in j]) ==1 else [j[k] for j in [one,two,three] if k in j] for k in set(list(one.keys())+list(two.keys())+list(three.keys()))}
# Output : {'a': ['2', '3.4', 1.2], 'b': '4', 'c': ['t', '7.6', 3.4], 'd': '2.3'}

答案 2 :(得分:1)

尝试

 one={'a': '2', 'c': 't', 'b': '4'}
 two={'a': '3.4', 'c': '7.6'}
 three={'a': 1.2, 'c': 3.4, 'd': '2.3'}

df = pd.DataFrame([one,two,three])

     a    b    c    d
0    2    4    t  NaN
1  3.4  NaN  7.6  NaN
2  1.2  NaN  3.4  2.3

df.to_dict(orient='list')

输出

{'a': ['2', '3.4', 1.2],
 'b': ['4', nan, nan],
 'c': ['t', '7.6', 3.4],
 'd': [nan, nan, '2.3']}

答案 3 :(得分:1)

我已使用您的示例进行操作-

one = {'a': '2', 'c': 't', 'b': '4'}
two = {'a': '3.4', 'c': '7.6'}
three = {'a': 1.2, 'c': 3.4, 'd': '2.3'}
dicts = [one, two, three]
for dictionary in dicts:
    for key, value in dictionary.items():
        try:
            new[key].append(value)
        except KeyError:
            new[key] = [value]

O / P-

{'a': ['2', '3.4', 1.2], 'c': ['t', '7.6', 3.4], 'b': ['4'], 'd': ['2.3']}