我写了一些python代码从SQL服务器中提取数据,我当前正在尝试合并数据。我试图将数据拉入Dataframe然后使用它,但是无法做到这一点。
我设置数据的当前表单如下:
[ { a : { 1 : ( x,y,z,...) }},
{ a : { 2 : ( x,y,z,...) }},
{ a : { 3 : ( x,y,z,...) }} ]
这是我想去的地方
[ { a : { 1 : ( x,y,z,...) , 2 : (x,y,...) , 3 : (x,y,z,...) } ]
答案 0 :(得分:2)
通过collections.defaultdict
使用嵌套词典结构。
请注意,在此实现中,不允许使用重复的内部键;例如,你不能有两个带有外键的词典' a'和内键1.在这种情况下,最后一个将优先。
from collections import defaultdict
lst = [ { 'a' : { 1 : ( 3, 4, 5 ) }},
{ 'a' : { 2 : ( 6, 7, 8 ) }},
{ 'a' : { 3 : ( 1, 2, 3 ) }},
{ 'c' : { 4 : ( 5, 9, 8 ) }},
{ 'b' : { 1 : ( 6, 6, 8 ) }},
{ 'c' : { 3 : ( 2, 5, 7 ) }}]
d = defaultdict(dict)
for item in lst:
key = next(iter(item))
d[key].update(item[key])
# defaultdict(dict,
# {'a': {1: (3, 4, 5), 2: (6, 7, 8), 3: (1, 2, 3)},
# 'b': {1: (6, 6, 8)},
# 'c': {3: (2, 5, 7), 4: (5, 9, 8)}})
答案 1 :(得分:1)
这是怎么回事?
data = [{'a': {1: 4}, 'b': {7: 8}},
{'a': {2: 5}, 'b': {9: 10}},
{'a': {3: 6}}]
all_keys = set().union(*data)
result = {}
for key in all_keys:
result[key] = {}
for d in data:
if key in d:
result[key].update(d[key])
print(result) # {'b': {7: 8, 9: 10}, 'a': {1: 4, 2: 5, 3: 6}}
答案 2 :(得分:0)
您可以使用reduce
函数和dict.update
来转换数据。假设'a'
是您唯一的密钥,您可以这样做:
a = [
{'a': {1: (1, 2, 3)}},
{'a': {2: (4, 5, 6)}},
{'a': {3: (7, 8, 9)}}
]
def update(d, c):
d['a'].update(c['a'])
return d
print reduce(update, a, {'a':{}}) #Prints {'a': {1: (1, 2, 3), 2: (4, 5, 6), 3: (7, 8, 9)}}