Python 字典的元组列表未按预期工作

Python 字典的元组列表未按预期工作,python,dictionary,Python,Dictionary,出于某种原因,我的小脑袋在这方面有问题,我有一个元组列表list=[('name:john'、'age:25'、'location:brazic')、('name:terry'、'age:32'、'location:acme')]。我正在尝试将这些值移动到字典中,以便稍后进行解析。我做了一些尝试,在最新的尝试下面,我没有把所有的结果都输入到dict中,dict以迭代的最后一个值结束(它每次都会重新创建dict) 您可以尝试以下方法: l = [('name:john','age:25','loc

出于某种原因,我的小脑袋在这方面有问题,我有一个元组列表
list=[('name:john'、'age:25'、'location:brazic')、('name:terry'、'age:32'、'location:acme')]
。我正在尝试将这些值移动到字典中,以便稍后进行解析。我做了一些尝试,在最新的尝试下面,我没有把所有的结果都输入到dict中,dict以迭代的最后一个值结束(它每次都会重新创建dict)

您可以尝试以下方法:

l = [('name:john','age:25','location:brazil'),('person:terry','age:32','location:acme')]
people = [{c:d for c, d in [i.split(':') for i in a]} for a in l]
输出:

[{'name': 'john', 'age': '25', 'location': 'brazil'}, {'person': 'terry', 'age': '32', 'location': 'acme'}]
[{'person': {'location': 'brazil', 'name': 'john', 'age': '25'}}, {'person': {'location': 'acme', 'name': 'terry', 'age': '32'}}]
{'person': [{'location': 'brazil', 'name': 'john', 'age': '25'}, {'location': 'acme', 'name': 'terry', 'age': '32'}]}

你也可以试试这个:

inlist = [('name:john','age:25','location:brazil'),('name:terry','age:32','location:acme')]
d = []

for tup in inlist:
    tempDict = {}
    for elem in tup:
        elem = elem.split(":")
        tempDict.update({elem[0]:elem[1]})
    d.append({'person':tempDict})

print(d)
输出:

[{'name': 'john', 'age': '25', 'location': 'brazil'}, {'person': 'terry', 'age': '32', 'location': 'acme'}]
[{'person': {'location': 'brazil', 'name': 'john', 'age': '25'}}, {'person': {'location': 'acme', 'name': 'terry', 'age': '32'}}]
{'person': [{'location': 'brazil', 'name': 'john', 'age': '25'}, {'location': 'acme', 'name': 'terry', 'age': '32'}]}
如果您想要一个带有键
person
的字典,并使用人员信息对字典进行赋值,则在打印之前将
d.append({'person':tempDict})
替换为
d.append(tempDict)
并添加
d={'person':d}

输出:

[{'name': 'john', 'age': '25', 'location': 'brazil'}, {'person': 'terry', 'age': '32', 'location': 'acme'}]
[{'person': {'location': 'brazil', 'name': 'john', 'age': '25'}}, {'person': {'location': 'acme', 'name': 'terry', 'age': '32'}}]
{'person': [{'location': 'brazil', 'name': 'john', 'age': '25'}, {'location': 'acme', 'name': 'terry', 'age': '32'}]}

首先,尽量不要打电话给你的名单。该名称在python中受保护,通常用于从迭代器或范围等中获取列表。 我会先列出一个人员列表,然后将每个人作为单独的字典附加到人员列表中,如下所示:

people = []

my_list = [('name:john','age:25','location:brazil'),('person:terry','age:32','location:acme')]

for tup in my_list:
    person = {}
    for item in tup:
        splitted = item.split(':')
        person.update({splitted[0]:splitted[1]})
    people.append(person)
然后输出如下:

[{'age': '25', 'location': 'brazil', 'name': 'john'},
 {'age': '32', 'location': 'acme', 'person': 'terry'}]

你想要它看起来像什么?从这段代码来看,这并不清楚。这是因为你在每次迭代中都覆盖了
人。但你想发生什么还不清楚。有关如何提出一个好问题的详细信息,请参阅和。将键值对存储为单个字符串似乎很奇怪。同理,我希望有这样的嵌套dict
{person:{name:john,age:25,location:etc}
。虽然顶层不是必需的,但只要一个带有
{name:john,age:25,location:etc}
的dict就足够了。@ABDULNIYASPM意外添加了
itertools
。现在移除了。是的,只是为了说明。但我不会这样做,即使是为了说明的目的。啊,这似乎是我试图做的,因为它不是一个压缩,我可以读得更清楚。谢谢你,我会在现场试一试data@iNoob不客气。如果您对此代码有任何问题,请通知我。这确实按照建议工作,但我刚刚注意到我收到了多条
个人
指令。最初的意图是一个
person
dict,上面提到的所有人都在其中。我可以完全放弃person-top-level