Python 我可以在循环中插入带有值列表的字典吗? 键、值 (0, 1) (0, 2) (0, 6) (0, 7) (1, 0) (1, 2) (2, 1) (2, 0) (3, 4) (3, 5) (4, 3) (5, 3) (6, 0) (7, 0)

Python 我可以在循环中插入带有值列表的字典吗? 键、值 (0, 1) (0, 2) (0, 6) (0, 7) (1, 0) (1, 2) (2, 1) (2, 0) (3, 4) (3, 5) (4, 3) (5, 3) (6, 0) (7, 0),python,dictionary,indexing,mergeddictionaries,Python,Dictionary,Indexing,Mergeddictionaries,我的python代码有问题。我想在python的字典中插入数据。我看到这样的错误: N = len(g.nodes()) label_for_node = dict((i, v) for i, v in enumerate(g.nodes())) node_for_label = dict((label_for_node[i], i) for i in range(N)) communities = dict((i, frozenset([i])) for i in range(N)) d

我的python代码有问题。我想在python的字典中插入数据。我看到这样的错误:

N = len(g.nodes())

label_for_node = dict((i, v) for i, v in enumerate(g.nodes()))
node_for_label = dict((label_for_node[i], i) for i in range(N))


communities = dict((i, frozenset([i])) for i in range(N))
dq_dict = {}
H = MappedQueue()

partition = [[label_for_node[x] for x in c] for c in communities.values()]

dq_dict = dict(
        (i, dict( (j)
            for j in [ node_for_label[u] for u in g.neighbors(label_for_node[i])] if j != i)) 
                    for i in range(N))

TypeError: cannot convert dictionary update sequence element #0 to a sequence
问题是我想在索引与上一个索引相同时插入dict。我想这样输出:

N = len(g.nodes())

label_for_node = dict((i, v) for i, v in enumerate(g.nodes()))
node_for_label = dict((label_for_node[i], i) for i in range(N))


communities = dict((i, frozenset([i])) for i in range(N))
dq_dict = {}
H = MappedQueue()

partition = [[label_for_node[x] for x in c] for c in communities.values()]

dq_dict = dict(
        (i, dict( (j)
            for j in [ node_for_label[u] for u in g.neighbors(label_for_node[i])] if j != i)) 
                    for i in range(N))

TypeError: cannot convert dictionary update sequence element #0 to a sequence
{0:{1,2,6,7},
1: {0, 2}, 
2: {1, 0}, 
3: {4, 5}, 
4: {3}, 
5: {3}, 
6: {0}, 
7: {0}}
范例

>>> data
[(0, 1), (0, 2), (0, 6), (0, 7), (1, 0), (1, 2), (2, 1), (2, 0), (3, 4), (3, 5), (4, 3), (5, 3), (6, 0), (7, 0)]
>>> dictify(data)
{0: {1, 2, 6, 7},
 1: {0, 2},
 2: {0, 1},
 3: {4, 5},
 4: {3},
 5: {3},
 6: {0},
 7: {0}}
您也可以使用集合来实现这一点。defaultdict

from collections import defaultdict
def dictify(data):
    result = defaultdict(set)
    for key, value in data:
        result[key].add(value)
    return result
你可以用


Dictionary的方法就是为了这个目的而建立的。它接受两个参数,键值,如果尚未在字典中插入键值,则接受键值的默认值。然后返回与键对应的值

l = [(0, 1), (0, 2), (0, 6), (0, 7), (1, 0), (1, 2), (2, 1), (2, 0), (3, 4), (3, 5), (4, 3), (5, 3), (6, 0), (7, 0)]
z={}
for k,v in l:
    z.setdefault(k,set()).add(v)

这里没有提供代码。如果你的代码有问题,你需要帮助,你应该向我们展示你的代码。你是如何找到预期的字典的?逻辑是什么?你的问题不清楚。请详细说明。您有元组列表吗?什么是
MappedQueue
?我的代码有效,但为什么集合必须是基数?
defaultdict(set,
            {0: {1, 2, 6, 7},
             1: {0, 2},
             2: {0, 1},
             3: {4, 5},
             4: {3},
             5: {3},
             6: {0},
             7: {0}})
l = [(0, 1), (0, 2), (0, 6), (0, 7), (1, 0), (1, 2), (2, 1), (2, 0), (3, 4), (3, 5), (4, 3), (5, 3), (6, 0), (7, 0)]
z={}
for k,v in l:
    z.setdefault(k,set()).add(v)