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”吗?可以。但我不明白这有什么意义。您已经在字典中找到了数据