我想创建这种格式的字典:
mydic = {
0: {'a': (20,10), 'b': 1, 'c': 0},
1: {'a': (0,10), 'b': 1, 'c': 0},
2: {'a': (4,5), 'b': 0, 'c': 0},
3: {'a': (6,2), 'b': 0, 'c': 0},
4: {'a': (1,4), 'b': 0, 'c': 1}
}
给出四个列表:
node = [0,1,2,3,4]
a = [(20,10),(0,10),(4,5),(6,2),(1,4)]
b = [1,0,0,0,0]
c = [0,1,0,0,1]
感谢您的帮助!
答案 0 :(得分:2)
如果可迭代项的长度相同,则可以将zip()
与 dict理解一起使用:
items = node, a, b, c
result = {n: {'a': a_, 'b': b_, 'c': c_} for n, a_, b_, c_ in zip(*items)}
# {0: {'a': (20, 10), 'b': 1, 'c': 0}, 1: {'a': (0, 10), 'b': 0, 'c': 1}, 2: {'a': (4, 5), 'b': 0, 'c': 0}, 3: {'a': (6, 2), 'b': 0, 'c': 0}, 4: {'a': (1, 4), 'b': 0, 'c': 1}}
也可以这样写:
items = node, a, b, c
keys = 'a', 'b', 'c'
result = {x[0]: dict(zip(keys, x[1:])) for x in zip(*items)}
您可能还可以在此处使用map()
:
items = node, a, b, c
keys = 'a', 'b', 'c'
result = dict(map(lambda x: (x[0], dict(zip(keys, x[1:]))), zip(*items)))
答案 1 :(得分:0)
假设您的列表大小相同,则可以遍历每个索引并为dict中的每个条目创建键/值对:
node = [0,1,2,3,4]
a = [(20,10),(0,10),(4,5),(6,2),(1,4)]
b = [1,0,0,0,0]
c = [0,1,0,0,1]
assert(len(node) == len(a) == len(b) == len(c)) #Length should be equal
mydict = dict() # init empty dict
# Loops from 0 to len(node)
for i in range(len(node)):
entry = {'a': a[i], 'b': b[i], 'c': c[i]} # Creates dict object matching format
mydict[node[i]] = entry # Sets dict as value for each node item
print(mydict)
这将输出:
{
0: {'a': (20, 10), 'b': 1, 'c': 0},
1: {'a': (0, 10), 'b': 0, 'c': 1},
2: {'a': (4, 5), 'b': 0, 'c': 0},
3: {'a': (6, 2), 'b': 0, 'c': 0},
4: {'a': (1, 4), 'b': 0, 'c': 1}
}