#python #python-3.x #list #dictionary
Вопрос:
Допустим, у меня есть три списка ниже:
list_1 = [1, 2, 3, 4, 5]
list_2 = ['a', 'b', 'c', 'd', 'e']
list_3 = [1.1, 2.2, 3.3, 4.4]
Как можно объединить эти три списка в этот:
[
{'int': 1, 'str': 'a', 'float': 1.1},
{'int': 2, 'str': 'b', 'float': 2.2},
{'int': 3, 'str': 'c', 'float': 3.3},
{'int': 4, 'str': 'd', 'float': 4.4},
{'int': 5, 'str': 'e', 'float': 5.5}
]
Каков синтаксически самый чистый способ добиться этого?
Спасибо за любую помощь!!
Ответ №1:
dct = [{'int':a,'str':b,'float':c} for a,b,c in zip(list_1,list_2,list_3)]
Ответ №2:
Попробуйте использовать zip()
.
Он в основном повторяется [(1, 'a', 1.1), (2, 'b', 2.2), (3, 'c', 3.3), (4, 'd', 4.4), (5, 'e', 5.5)]
, сопоставляет это с вашими ключами ["int","str","float"]
и создает список словарей с этим.
компактный
dictList = [{k:v for k,v in zip(['int','str','float'],pair)} for pair in zip(list_1,list_2,list_3)]
читаемый для человеческого глаза
dictList = []
for pair in zip(list_1,list_2,list_3):
dicts1 = {}
for k,v in zip(['int','str','float'],pair):
dicts1[k] = v
dictList.append(dicts1)
немного закодировано
dictList = [{'int':x,'str':y,'float':z} for x,y,z in zip(list_1,list_2,list_3)]
выход
[
{'int': 1, 'str': 'a', 'float': 1.1},
{'int': 2, 'str': 'b', 'float': 2.2},
{'int': 3, 'str': 'c', 'float': 3.3},
{'int': 4, 'str': 'd', 'float': 4.4},
{'int': 5, 'str': 'e', 'float': 5.5}
]
Ответ №3:
Это похоже на решение @Tim Roberts, но допускает произвольный ввод текста.
[dict(((type(x).__name__,x) for x in (a,b,c))) for a,b,c in zip(list_1,list_2,list_3)]