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

2024-05-26 09:19:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

people = {}

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

for value in list:
        people = {'person': [dict(item.split(":",1) for item in value)]}

Tags: nameinforagevaluelocationitemjohn
3条回答

首先,尽量不要给你的列表打电话。这个名称在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'}]

你也可以试试这个:

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)

输出:

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

如果您想要一个带有键person的字典,并且用人们的信息来计算字典的值,那么在打印之前用d.append(tempDict)替换d.append({'person':tempDict}),并添加d = {'person':d}。你知道吗

输出:

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

你可以试试这个:

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'}]

相关问题 更多 >