我想转换这个词典列表:
input_list = [
{'a': 5,'b': 7},
{'a': 3,'b': 4},
]
到此:
result_dict = {
'a': [5, 3],
'b': [7, 4]
}
我不知道怎么能设法做到这一点。
请有人帮助我。
答案 0 :(得分:6)
result = {}
for subdic in data:
for k, v in subdic.items():
result.setdefault(k, []).append(v)
这里我们迭代这些项目,我们在result
dict中添加一个空列表,以防密钥尚未出现在字典中。无论是否已有列表,我们都会将v
附加到该列表中。
defaultdict
我们可以使用defaultdict
中的collections
:
from collections import defaultdict
result = defaultdict(list)
for subdic in data:
for k, v in subdic.items():
result[k].append(v)
这里我们基本上对setdefault
进行抽象(我们还节省了构建无用的空列表)。如果输出应该是dict
(而不是defaultdict
),我们可以使用以下函数结束函数:
result = dict(result)
pandas
如果每个字典包含相同的键,我们可以使用pandas:
from pandas import DataFrame
result = DataFrame(data).to_dict(orient='list')
答案 1 :(得分:2)
result_dict = {}
for index, row_dict in enumerate(input_list):
for key, item_dict in row_dict.items():
if not key in result_dict:
result_dict[key] = []
result_dict[key].append(row_dict[key])
嗯,我认为这样做了。也许有人提出了更好的方法..
答案 2 :(得分:2)
所以这里有可能对你有所帮助。
它使用defaultdict
构造,这可能是一种矫枉过正,但它可以干净地解决任务。
from collections import defaultdict
input_list = [
{'a': 5, 'b': 7},
{'a': 3, 'b': 4},
]
result_dict = defaultdict(list)
for i, j in zip(*[i.items() for i in input_list]):
result_dict[i[0]].append(i[1])
result_dict[j[0]].append(j[1])
print dict(result_dict)
答案 3 :(得分:2)
In [1]: input_list = [
...: {'a': 5,'b': 7},
...: {'a': 3,'b': 4},
...: ]
In [2]: result_dict = {}
In [3]: for d in input_list:
...: for k, v in d.items():
...: if k not in result_dict:
...: result_dict[k] = [v]
...: else:
...: result_dict[k].append(v)
...:
In [4]: result_dict
Out[4]: {'a': [5, 3], 'b': [7, 4]}
答案 4 :(得分:1)
一衬垫
{y[0][0]: list(zip(*y)[1]) for y in zip(*[x.items() for x in input_list])}
有点冒险,我们每次都严重依赖.items()
以相同的顺序返回密钥。
答案 5 :(得分:0)
稍微详细的解决方案,但这也有效:
Map<String, String> m = Stream.of("1", "2", "3")
// .map(StreamTuple::create)
.map(id -> new StreamTuple<>(id, id))
.collect(toMap(StreamTuple::left, StreamTuple::right));