从点列表和多个属性列表创建字典

时间:2018-11-02 15:56:03

标签: python python-3.x list dictionary

我想创建这种格式的字典:

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]

感谢您的帮助!

2 个答案:

答案 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}
}