使用下面的数据,我尝试展开一个包含字典列表的字典,然后将每个键与其他字典的对应值组合在一起。例如:
result = {
'themes' : [{
'a' : 'orange',
'b' : 6,
'c' : 'neutral',
'd' : 6,
'e' : 0.24
}, {
'a' : 'banana',
'b' : 6,
'c' : 'neutral',
'd' : 6,
'e' : 0.16
}, {
'a' : 'phone',
'b' : 5,
'c' : 'neutral',
'd' : 5,
'e' : 0.02
}
]
}
...should变成了这样的东西:
themes={'a' : ['orange','banana', 'phone']}
count={'b' : [6,6,5]}
s_score={'c' : [neutral, neutral, neutral]}
...and等。
我在其他地方看过here、here和here,但找不到与我想做的事情足够接近的东西。This非常接近,但它正在检查至少一个或多个公共值,而我的应该对公共密钥进行分组。我知道我可以将外部键与这样的值分开:
>>>(k, v), = result.items()
>>>k
>>>'themes'
>>>v
>>>[{
'a' : 'orange',
'b :6,
'c' : 'neutral',
'd' : 6,
'e' : 0.24
}, {
'a' : 'banana',
'b' : 6,
'c' : 'neutral',
'd' : 6,
'e' : 0.16
}, {
'a' : 'phone',
'b' : 5,
'c' : 'neutral',
'd' : 5,
'e' : 0.02
}
]
但是,我怎样才能像我所描述的那样,把字典的第五部分列出来呢?我必须先把它们转换成集合吗?
为了表明我的意图,我的最终目标是迭代我想保留的键的值列表,这样我就可以在我的基本的烧瓶-sqlalchemy数据库中将它们输入到它们各自的列中。最后,我将能够查询并将它们显示为html:
+-----------------+----------+----------+-------+
| a | b | c | d |
+-----------------+----------+----------+-------+
| orange | 2.4 | neutral | 6 |
| banana | 1.6 | neutral | 6 |
+-----------------+----------+----------+-------+
发布于 2015-04-11 02:16:45
dict1 = {}
for eachKey in list(set(",".join(each.keys()) for each in result["themes"]))[0].split(","):
dict1[eachKey] = [each[eachKey] for each in result["themes"]]
print dict1
它将使您的result
减少到下面的字典-
{'a': ['orange', 'banana', 'phone'], 'c': ['neutral', 'neutral', 'neutral'], 'b': ['6', 6, 5], 'e': [0.24, 0.16, 0.02], 'd': [6, 6, 5]}
发布于 2015-04-11 02:02:44
首先,应该在元组列表( flatMap .]中对所有值进行flatMap。然后是groupBy第一个元素。我会这样做:
import itertools
pairs = itertools.chain.from_iterable([d.items() for d in result["themes"]])
result = {}
for key, elem in pairs:
result.setdefault(key, []).append(elem)
print result
发布于 2015-04-11 02:19:04
使用defaultdict
试试这个
from collections import defaultdict
d = defaultdict(list)
for i,j in result.iteritems():
for k in j:
for l,m in k.iteritems():
d[l].append(m)
>>>d
defaultdict(<type 'list'>, {'a': ['orange', 'banana', 'phone'], 'c': ['neutral', 'neutral', 'neutral'], 'b': ['6', 6, 5], 'e': [0.24, 0.16, 0.02], 'd': [6, 6, 5]})
现在您可以通过
themes = {'a':d['a']}
>>>themes
{'a': ['orange', 'banana', 'phone']}
所以,on.Hope,这有帮助
https://stackoverflow.com/questions/29576310
复制