根据下面的数据,我试图展开一个包含字典列表的字典,然后将每个字符串与其他字典的相应值组合在一起。例如:
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
}
]
}
......应该成为这些方面的东西:
themes={'a' : ['orange','banana', 'phone']}
count={'b' : [6,6,5]}
s_score={'c' : [neutral, neutral, neutral]}
......等等。
我在其他地方看过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
}
]
但是如何按照我描述的方式获取字典v列表呢?我是否必须先将它们转换为套装?
为了明确我的意图,我的最终目标是遍历我想要保留的键的值列表,因此我可以在我相当基本的flask-sqlalchemy SQLite数据库中将它们输入到各自的列中。所以最后我能够查询并将它们显示为html:
+-----------------+----------+----------+-------+
| a | b | c | d |
+-----------------+----------+----------+-------+
| orange | 2.4 | neutral | 6 |
| banana | 1.6 | neutral | 6 |
+-----------------+----------+----------+-------+
答案 0 :(得分:0)
首先应该在元组列表([('a', 'orange'), ('c', 'neutral'), ('b', '6')
..])中平面映射所有值,然后将第一个元素分组。我会这样做:
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
答案 1 :(得分:0)
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]}
答案 2 :(得分:0)
使用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']}
等等。希望这有帮助
答案 3 :(得分:0)
您可以将themes
,count
和score
保留在一个字典中 - final_dict
。
在代码中:
>>> lst = result['themes']
>>> final_dict = {}
>>> for d in lst:
... for (k, v) in d.items():
... final_dict.setdefault(k, []).append(v)
>>> print final_dict
{'a': ['orange', 'banana', 'phone'], 'c': ['neutral', 'neutral', 'neutral'], 'b': [6, 6, 5], 'e': [0.24, 0.16, 0.02], 'd': [6, 6, 5]}