我有一个这个序列的嵌套字典a
data_dict = {0: [{1: 2}, {2: 3}, {3: 6}, {7: 8}], 1: [{0: 2}, {4: 7}, {2: 5}], 2: [{0: 3}, {1: 5}, {5: 4}, {11: 5}],
3: [{0: 6}, {6: 2}, {11: 4}], 4: [{1: 7}], 5: [{2: 4}, {8: 3}], 6: [{3: 2}, {9: 3}], 7: [{0: 8}], 8: [{5: 3}], 9: [{6: 3}, {10: 6}],
10: [{9: 6}], 11: [{2: 5}, {3: 4}]}
我想将字典解包到列表中
0 1 2
0 2 3
0 3 6
0 7 8
1 4 7
1 2 5
2 5 4
2 11 5
3 6 2
3 11 4
5 8 3
6 9 3
9 10 6
准确地说,我想从嵌套字典中创建一个networkX图。请帮忙
答案 0 :(得分:0)
dict
{0: [{1: 2}, {2: 3}, {3: 6}, {7: 8}],
1: [{0: 2}, {4: 7}, {2: 5}],
2: [{0: 3}, {1: 5}, {5: 4}, {11: 5}],
3: [{0: 6}, {6: 2}, {11: 4}],
4: [{1: 7}],
5: [{2: 4}, {8: 3}],
6: [{3: 2}, {9: 3}],
7: [{0: 8}],
8: [{5: 3}],
9: [{6: 3}, {10: 6}],
10: [{9: 6}],
11: [{2: 5}, {3: 4}]}
results = []
for v,list_dicts in data_dict.items():
for d in list_dicts:
results.append([v,list(d.keys())[0],list(d.values())[0]])
results
[OUT]
[[0, 1, 2],
[0, 2, 3],
[0, 3, 6],
[0, 7, 8],
[1, 0, 2],
[1, 4, 7],
[1, 2, 5],
[2, 0, 3],
[2, 1, 5],
[2, 5, 4],
[2, 11, 5],
[3, 0, 6],
[3, 6, 2],
[3, 11, 4],
[4, 1, 7],
[5, 2, 4],
[5, 8, 3],
[6, 3, 2],
[6, 9, 3],
[7, 0, 8],
[8, 5, 3],
[9, 6, 3],
[9, 10, 6],
[10, 9, 6],
[11, 2, 5],
[11, 3, 4]]
答案 1 :(得分:0)
这是使用itertools和comprehensions的一个解决方案。 (我承认它可能不是第一眼看到的最简单的。)
它还处理每个字典有多对。
如果您希望将该对作为输出中的元组,请移除*
中的解压缩*pair
。
from itertools import chain
from pprint import pprint
data_dict = {
0: [{1: 2}, {2: 3}, {3: 6}, {7: 8}],
1: [{0: 2}, {4: 7}, {2: 5}],
2: [{0: 3}, {1: 5}, {5: 4}, {11: 5}],
3: [{0: 6}, {6: 2}, {11: 4}],
4: [{1: 7}],
5: [{2: 4}, {8: 3}],
6: [{3: 2}, {9: 3}],
7: [{0: 8}],
8: [{5: 3}],
9: [{6: 3}, {10: 6}],
10: [{9: 6}],
11: [{2: 5}, {3: 4}],
}
data_list = list(chain(*(
[(key, *pair) for pair in chain(*(d.items() for d in dicts))]
for (key, dicts)
in data_dict.items()
)))
pprint(data_list)
输出:
[(0, 1, 2),
(0, 2, 3),
(0, 3, 6),
(0, 7, 8),
(1, 0, 2),
(1, 4, 7),
(1, 2, 5),
(2, 0, 3),
(2, 1, 5),
(2, 5, 4),
(2, 11, 5),
(3, 0, 6),
(3, 6, 2),
(3, 11, 4),
(4, 1, 7),
(5, 2, 4),
(5, 8, 3),
(6, 3, 2),
(6, 9, 3),
(7, 0, 8),
(8, 5, 3),
(9, 6, 3),
(9, 10, 6),
(10, 9, 6),
(11, 2, 5),
(11, 3, 4)]
答案 2 :(得分:-1)
def nthFrequent2(arr, n):
for i, (value, _) in enumerate(itertools.groupby(sorted(arr))):
if i == n - 1:
return value
这应该可以解决你的问题