Python:将值合并到唯一键列表中

时间:2019-07-01 17:28:28

标签: python list dictionary merge

我有一个字典列表,其中包含一个键和一个字典值,例如:

Array = [
    {'Example1': {'Time Taken': 56, 'Type': 'Quiz'} },
    {'Example1': {'Time Taken': 58, 'Type': 'Exam'} },
    {'Example2': {'Time Taken': 40, 'Type': 'Quiz'} } ]

我想遍历该列表并仅获取唯一键,并将这些值合并到一个列表中,如下所示:

{ 'Example1': [
    { 'Time Taken': 56, 'Type': 'Quiz' },
    { 'Time Taken': 58, 'Type': 'Exam' } ] }

{ 'Example2': [ { 'Time Taken': 40, 'Type': 'Quiz' } ] }

关于如何执行此操作的任何想法?我尝试了很多不同的方法,但是似乎无法获得编写此代码的有效方法。任何反馈表示赞赏。

4 个答案:

答案 0 :(得分:2)

使用collections.defaultdict

例如:

from collections import defaultdict

Array = [ {"Example1": {"Time Taken": 56, "Type": "Quiz"} }, {"Example1": {"Time Taken": 58, "Type": "Exam"} }, {"Example2": {"Time Taken": 40, "Type": "Quiz"} } ]
result = defaultdict(list)
for ar in Array:                 #Iterate each element in list
    for k, v in ar.items():      #Iterate your dict
        result[k].append(v)      #Create key-list.
print(result)

输出:

defaultdict(<class 'list'>, {'Example1': [{'Time Taken': 56, 'Type': 'Quiz'}, {'Time Taken': 58, 'Type': 'Exam'}], 'Example2': [{'Time Taken': 40, 'Type': 'Quiz'}]})

答案 1 :(得分:0)

如果缺少键,则可以遍历字典并使用dict.setdefault将默认值设置为空列表,否则将其追加到列表中

for dct in Array: 
    for k, v in dct.items(): 
        out.setdefault(k, []).append(v) 

out是所需的输出dict

示例:

In [1208]: arr = [ {'Example1': {'Time Taken': 56, 'Type': 'Quiz'} }, {'Example1': {'Time Taken': 58, 'Type': 'Exam'} }, {'Example2': {'Time Taken': 40, 'Type': 'Quiz'} } ]                                

In [1209]: out = {}                                                                                                                                                                                         

In [1210]: for dct in arr: 
      ...:     for k, v in dct.items(): 
      ...:         out.setdefault(k, []).append(v) 
      ...:                                                                                                                                                                                                  

In [1211]: out                                                                                                                                                                                              
Out[1211]: 
{'Example1': [{'Time Taken': 56, 'Type': 'Quiz'},
  {'Time Taken': 58, 'Type': 'Exam'}],
 'Example2': [{'Time Taken': 40, 'Type': 'Quiz'}]}

答案 2 :(得分:0)

尝试关注。

from collections import defaultdict
# l is list of dictionaries
d = defaultdict(list)
for x in l:
    for y in x:
        d[y].append(x[y])
print(d)

答案 3 :(得分:0)

我创建了以下内容,没有任何外部模块

Array = [{'Example1': {'Time Taken': 56, 'Type': 'Quiz'} }, 
         {'Example1': {'Time Taken': 58, 'Type': 'Exam'} }, 
         {'Example2': {'Time Taken': 40, 'Type': 'Quiz'} }]

result = {}
for i in range(len(Array)):
    dict = Array[i]
    for key in dict :
        if key in result:
            result[key].append(dict[key]) 
        else:
            result[key]=[dict[key]]

print(result)

输出:

{
 'Example1': [{'Time Taken': 56, 'Type': 'Quiz'},
              {'Time Taken': 58, 'Type': 'Exam'}],
 'Example2': [{'Time Taken': 40, 'Type': 'Quiz'}]
}