Python将多个列表转换为字典

4

我有三个列表:

names = ["john", "paul", "george", "ringo"]
job = ["guitar", "bass", "guitar", "drums"]
status = ["dead", "alive", "dead", "alive"]

我正在尝试找出将这些列表合并为以下字典的最佳方法:
{"person":{"Name":"john", "Job":"guitar", "Status":"dead"}, "person":{"Name":"paul", "Job":"bass", "Status":"alive"}, "person":{"Name":"george", "Job":"guitar", "Status":"dead"}, "person":{"Name":"ringo", "Job":"drums", "Status":"alive"}}

我尝试使用dict(zip),但无法像上面那样格式化。谢谢!

5
你的输出没有意义。字典不能有重复的键,这与字典的目的相矛盾。result["person"]会得到什么? - Denziloe
2
你的输出没有太多意义。在字典中,你不能有重复的键,所以最终你会得到一个只包含单个人的字典。 - Aran-Fey
@bababooey92 谢谢你提出这个问题。我也有同样的疑问,但在下面的回答中找到了我真正需要的答案。 - enter_display_name_here
3个回答

12

我认为您想要的是一个字典列表。您可以将三个列表使用zip合并,并使用列表解析式。这是一个例子:

[
    {'name': name, 'job': job, 'status': status}
    for name, job, status in zip(names, jobs, statuses)
]

(还将您的job重命名为jobs,将status重命名为statuses

这将给您:

[
  {'name': 'john', 'job': 'guitar', 'status': 'dead'},
  {'name': 'paul', 'job': 'bass', 'status': 'alive'},
  {'name': 'george', 'job': 'guitar', 'status': 'dead'},
  {'name': 'ringo', 'job': 'drums', 'status': 'alive'}
]

4
我想这就是你要找的内容:

我认为这就是你正在寻找的内容:

>>> names = ["john", "paul", "george", "ringo"]
>>> job = ["guitar", "bass", "guitar", "drums"]
>>> status = ["dead", "alive", "dead", "alive"]
>>> persons = []
>>> for n, j, s in zip(names, job, status):
...    person = { 'name': n, 'job': j, 'status': s }
...    persons.append(person)
...
>>> persons
[{'status': 'dead', 'job': 'guitar', 'name': 'john'}, {'status': 'alive', 'job': 'bass', 'name': 'paul'}, {'status': 'dead', 'job': 'guitar', 'name': 'george'}, {'status': 'alive', 'job': 'drums', 'name': 'ringo'}]
>>>

0
尝试这种方法:
names = ["john", "paul", "george", "ringo"]
job = ["guitar", "bass", "guitar", "drums"]
status = ["dead", "alive", "dead", "alive"]

两步流程:

description =[{'job': j, 'status': s} for j,s in zip(job,status)]
artist ={n: i for n,i in zip(names,description)}}

最终输出:

print(artist)

{'john': {'job': 'guitar', 'status': 'dead'},
 'paul': {'job': 'bass', 'status': 'alive'},
 'george': {'job': 'guitar', 'status': 'dead'},
 'ringo': {'job': 'drums', 'status': 'alive'}}

然后你可以像这样做:

artist['ringo']['job']

输出:

'drums'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接