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

Python:将值合并到唯一键的列表中,python,list,dictionary,merge,Python,List,Dictionary,Merge,我有一个字典列表,其中包含一个键和一个字典值: Array = [ {'Example1': {'Time Taken': 56, 'Type': 'Quiz'} }, {'Example1': {'Time Taken': 58, 'Type': 'Exam'} }, {'Example2': {'Time Taken': 40, 'Type': 'Quiz'} } ] 我希望遍历列表并仅获取唯一键,将值合并到一个列表中,如下所示: { 'Example1': [

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

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' } ] }

你知道怎么做吗?我尝试了很多不同的方法,但似乎无法找到一种有效的方法来编写此代码。感谢您的反馈。

使用
集合。defaultdict

Ex:

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'}]})
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'}]}
输出:

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'}]})
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'}]}
defaultdict(,{'Example1':[{'Time taked':56,'Type':'quick'},{'Time taked':58,'Type':'Example2':[{'Time taked':40,'Type':'quick'}])

您可以迭代dict并使用
dict.setdefault
将默认值设置为空列表(如果缺少键),否则将其追加到列表中:

for dct in Array: 
    for k, v in dct.items(): 
        out.setdefault(k, []).append(v) 
out
是所需的输出
dict

示例:

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'}]})
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'}]}
试试下面的

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)

我已经创建了以下没有任何外部模块

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'}]
}

这很有帮助!如果我想将“Example1”和“Example2”放入两个字典中,以及它们各自的列表值,我可以迭代数组“result”吗?可以。但我不明白这有什么意义。您已经在字典中找到了数据